2010-11-20 35 views
2

嘿,夥計們,我正在編寫一個計算學生GPA的程序。出於某種原因,編譯器在比較兩個字符串時給了我一個錯誤,但我似乎找不到原因。在下面你會發現一段給我錯誤的代碼。如果有人能幫我弄明白,我會很感激。在C++中比較字符串與字符

錯誤:無法轉換 '的std :: string' 到 '爲const char *' 的參數 '1' 到 '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;} 
+0

不知道這是你的錯誤,但是大部分的STRNCMP線缺失的第三個參數(給長度來比較) – 2010-11-20 20:08:30

回答

9

你做不必爲此使用strncmp。如果你想字符串相等,你可以這樣寫代碼:

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

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

+0

謝謝你很多 – Daniel 2010-11-20 20:09:50

2

getGrade()返回的字符串,那麼你需要的課程[I] .getGrade()。c_str()

1

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

1

我會嘗試:

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

你正在使用'strcmp'簽名 - 'strncmp'需要第三個參數來指定限制比較的字符數。 – birryree 2010-11-20 20:31:17

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; 
};