2017-11-15 6 views
-3

이 제약 조건을 추가해야한다는 점을 제외하고는 코드가 제대로 작동합니다. "입력이 NULL이면 -1을 반환합니다".입력이 NULL 인 경우 -1을 반환합니다.

나는 이것을 어떻게 할 수 있는지 궁금합니다. 매번 NULL을 s에 넣으면 충돌이 발생합니다.

사이드 참고 : 당신이 알 필요가있는 경우,이 A = 1과 같은 숫자로 엑셀 타이틀을 변환, Z = 26 등 AA = 27, AB = 28,

#include <iostream> 

using namespace std; 

class CIS14 
{ 
public: 
int convertExcelTitleToNumber(string* s) 
{ 

    string str = *s; 

    int num = 0; 
    for (unsigned int i = 0; i < str.length(); i++) 
    { 
     num = num * 26 + str[i] - 64; 
    } 
    return num; 
} 
}; 
int main() 
{ 
CIS14 cis14; 
string s = "AA"; 
cout << cis14.convertExcelTitleToNumber(&s) << endl; 

return 0; 

}

+0

왜 포인터를 사용하고 있습니까? 입력이'nullptr'이라면 뭔가 수행 할 함수가 있습니까? 참조를 취하고 호출자가'std :: string'을 전달하도록하십시오. – Tas

+0

@ 택스, 당신의 조언은 훌륭합니다. 불행히도,'CIS14'는 수업 준비를 망칩니다. 그래서 현실적인 경험이 거의없는 일부 교육자가 요구할 수도 있고,'C +'프로그래머라고 부를 수도 있습니다. '~'C++':-) – paxdiablo

답변

1

sNULL을 입력 할 때마다 충돌이 발생합니다.

null 포인터 (귀하의 경우 string str = *s)를 역 참조하는 것은 전혀 정의되지 않은 동작입니다. 널 (null) 문자열 포인터를 전달할 때

는이 문제를 방지하려면

if (s == nullptr) 
    return -1 
:

cout << cis14.convertExcelTitleToNumber(nullptr) << endl; 

당신이 당신의 함수에서 첫번째 것 같은이 같은 뭔가가 필요, 역 참조 s하려고

어두운 시대에 머물러 있다면 nullptr 대신 NULL을 사용하십시오.