【问题标题】:Comparing a string with a character in C++在 C++ 中将字符串与字符进行比较
【发布时间】:2010-11-20 20:05:17
【问题描述】:

大家好,我正在尝试编写一个计算学生 GPA 的程序。出于某种原因,编译器在比较两个字符串时给了我一个错误,但我似乎找不到原因。您将在下面找到给我错误的代码。如果有人能帮我弄清楚,我将不胜感激。

错误:无法将参数“1”转换为“std::string”到“const char*”到“int strncmp(const char*, const char*, size_t)”

double StudentInfo::getGPA() {
double temp = 0;
for(int i = 0; i < totalCourses; i++) { 
    if(strncmp(Courses[i].getGrade(), "A") == 0) //Gets string "grade", and compares it to "A".
        temp = temp + 4;
    if(strncmp(Courses[i].getGrade(),"A-", 2) == 0)
        temp = temp + 3.7;
    if(strncmp(Courses[i].getGrade(), "B+", 2) == 0)
        temp = temp + 3.3;
    if(strncmp(Courses[i].getGrade(), "B") == 0)
        temp = temp + 3;
    if(strncmp(Courses[i].getGrade(), "B-", 2) == 0)
        temp = temp + 2.7;
    if(strncmp(Courses[i].getGrade(), "C+", 2) == 0)
        temp = temp + 2.3;
    if(strncmp(Courses[i].getGrade(), "C") == 0)
        temp = temp + 2;
    if(strncmp(Courses[i].getGrade(), "C-") == 0)
        temp = temp + 1.7;
    if(strncmp(Courses[i].getGrade(), "D+") == 0)
        temp = temp + 1.3;
    if(strncmp(Courses[i].getGrade(), "D") == 0)
        temp = temp + 1;
    else
        temp = temp + 0;
}
GPA = temp/totalCourses;
return GPA;}

【问题讨论】:

  • 不确定这是您的错误,但您的大多数 strncmp 行都缺少第三个参数(给出要比较的长度)

标签: c++


【解决方案1】:

您不必为此使用strncmp。如果你想要字符串相等,你可以编写如下代码:

if (Courses[i].getGrade() == "A")
 // ...

edit 请注意,这适用于std::string,因为它有一个重载的operator==

【讨论】:

    【解决方案2】:

    getGrade() 返回字符串然后你需要 Courses[i].getGrade().c_str()

    【讨论】:

      【解决方案3】:

      使用Courses[i].getGrade().c_str()this 返回字符串缓冲区的char* (const char*)。

      【讨论】:

        【解决方案4】:

        我会尝试:

        if(strncmp(Courses[i].getGrade().c_str(), "A") == 0) 
        

        【讨论】:

        • 您正在使用 strcmp 签名 - strncmp 需要第三个参数来指定限制比较的字符数。
        【解决方案5】:

        我只想将你的 getGrage() 函数重写为

         float getGrade(){ 
             float grade = 1 + 'D' - toupper(grade[0]); 
             if (grade < 1 || grade > 4) 
                 return 0;
             if (grade[1] == '+') return grade + 0.3;
             if (grade[1] == '-') return grade - 0.3;
             return grade;
         }; 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-15
          • 1970-01-01
          • 2020-07-01
          • 2016-10-17
          • 1970-01-01
          • 2020-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多