2010-11-20 4 views
2

안녕 얘들 아, 나는 학생의 평점을 계산하는 프로그램을 작성하려고합니다. 어떤 이유로 컴파일러에서 두 문자열을 비교할 때 오류가 발생하지만 그 이유를 찾을 수없는 것 같습니다. 아래에 오류가 발생하는 코드 조각이 있습니다. 누군가가 알아낼 수 있다면 정말 감사 할 것입니다.C++에서 문자와 문자열 비교

ERROR : 인수 '1' 'INT의 strncmp (CONST의 char *, const를 숯불 *, 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

하지 않도록하기 위해 getGrage() 기능을 다시 것이라고합니다 (을 제공 길이를 비교할 때) –

답변

9

에 대한 'const를 숯불 *'에 '표준 : : 문자열을'변환 할 수 없습니다 이것을 위해 strncmp을 사용할 필요가 없습니다. 당신은 문자열 평등을 원하는 경우는 다음과 같이 코드를 작성할 수 있습니다 :이 std::string에 대한 작동

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

편집 참고 그 다음 오버로드 operator==

+0

고마워. 너 많이. – Daniel

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

0

난 그냥 당신의 오류,하지만 당신 strncmp 라인의 대부분은 세 번째 인수를 누락

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