簡體   English   中英

將字符串與C ++中的字符進行比較

[英]Comparing a string with a character in C++

嘿伙計們,我正在嘗試編寫一個計算學生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 如果你想要字符串相等,你可以編寫如下代碼:

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

編輯請注意,這適用於std::string因為它有一個重載的operator==

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

使用Courses[i].getGrade().c_str()這將返回字符串緩沖區的char*const char* )。

我會嘗試:

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

我只想重寫你的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;
 }; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM