2012-07-30 2 views
-1

나는 성의 문자열에서 참조 코드를 만드는 코드가 약간 있습니다. 먼저 char 모음을 찾았는지 아닌지를 확인한 다음, 배열에있는 나머지 char을 모두 검색하여 string의 자음을 저장하는 모음을 삭제 한 다음 stringstring refCode;에 반환합니다.이 코드는 C에서 저에게 제공되었으며 다음으로 변환되었습니다. C++. 코드를 컴파일하면 첫 번째 값이 올바르게 할당되지만 iftrue을 반환하면 두 번째 값을 string에 할당하려고 시도하면 오류가 발생합니다. 코드는 5 외부 .cpp s와 4 .h s 이상이므로 최소 금액부터 시작하여 필요한만큼 더 게시 할 것입니다.C++의 함수에서 문자열 반환

Protytpe :

string makeRefCode(string lastname, int cNo); 

전화 :

refCode = makeRefCode(e[c].lastname, cNo); cout << refCode;//Prints nothing 

기능 인증 된 정의 : 내가 어설 왔이 문제를 액세스 위반을 해결하려고했습니다으로

string makeRefCode(string lastname, int cNo) 
{ 
    string tStr; 
    unsigned int i, j = 1; 
    unsigned int x; 
    x = lastname.length(); 
    tStr[0] = lastname[0]; 
    cout << tStr[0];//Prints correct value 
    for (i = 1; i < x; i++) 
    { 
     if (!isVowel(toupper(lastname[i]))) 
     { 
      //tStr[j] = lastname[i];// 
      j++; 
     } 
    } 
    //refCode[j] = '0'; // add string terminator 
    return tStr; 
} 

bool isVowel(char aChar) 
{ 
    switch (aChar) //<ctype> 
    { 
     case 'A': 
     case 'E': 
     case 'I': 
     case 'O': 
     case 'U': return true; break; 
     default: return false; 
    } 
} 

하고, 문자열이 충분히 크지 않다는 문자열 오류가 발생했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+2

문자열에 문자를 추가하려면'push_back'를 사용합니다. 존재하지 않는 문자에 액세스하지 마십시오.또한 터미네이터를 추가하지 마십시오. 이들은 C++ 문자열이 아니라 C 스타일 문자열입니다. –

+0

고마워, 나는 null에 그것이 처음부터 C라고 생각했다. – ChiefTwoPencils

+0

한편, 종결자인''0 '은 평소와 다릅니다. 그러나 실제로 '\ 0'(즉, '0')을 의미한다면 David의 조언을 따르십시오. –

답변

5

문자열의 크기가 자동으로 커지지 않습니다. 문자열이 길이가 0에서 시작하는 경우 (예 : tStr) 문자의 끝에 문자열을 추가하려면 push_back을 사용해야합니다.

tStr.push_back(lastname[0]); 

과 빈 문자열에

tStr.push_back(lastname[i]); 
당신은 말을 안
+3

'+ ='연산자도 작동합니다. – Michael

+0

감사! 그것은 위대한 작품. 나는'vectors'로'push_back'을 보았습니다. 그러나 불행히도 저는 배울 점이 많습니다.) – ChiefTwoPencils

+0

@ Michael- 아는 니스! – ChiefTwoPencils

1

tStr[0]! 분명히, 목표 문자열은 결과를 담을만큼 충분히 커야합니다. tStr.push_back(lastname[0]); 또는 tStr += lastname[0];을 말하거나 (std::string tStr(lastname.size())과 같이) 충분히 큰 문자열을 초기화 한 다음 완료되면자를 수 있습니다.

1

단일 문자를 문자열에 할당 할 때 문자열에 해당 문자가 할당되어 있는지 확인하십시오.

다음 코드는 잘못된 것입니다 :

string tStr; 
//... 
tStr[0] = lastname[0]; 

때문에, 그것은 tStr의 첫 번째 문자에 값을 할당합니다. 그러나 tStr은이 시점에서 비어 있습니다.

string tStr; 
//... 
tStr.push_back(lastname[0]); 

또한, 당신이 LASTNAME이 비어 있지 확인해야합니다 :

당신은/추가 문자와 push_back 싶다.

1

당신은 0 길이에 대한 검사를 추가해야합니다

if (x==0) .... 

그리고 당신과 함께 commmented 코드 tStr[j] = ...를 대체해야합니다,

tStr.push_back(lastname[i]);