2015-01-28 2 views
0

임의의 문자열을 벡터로 생성해야하는 제 기능에 문제가 있습니다. 그러나, 내가 얻는 것은 벡터의 첫 번째 요소가 무작위이고 나머지는 비어 있습니다. 코드는 다음과 같습니다.C++에서 임의의 문자열 벡터 생성

void losuj(vector <string> &vec, int ile){ 
    int i, j; 
    string str; 
    stringstream ss; 
    char c; 
    for(i=0; i<ile; i++){ 
     for(j=0; j<5; j++){ 
      c= rand()%25 + 97; 
      ss << c; 
     } 
     ss >> str; 
     vec.push_back(str); 
     ss.str().clear(); 
     str.clear(); 
    } 
} 

무엇이 잘못되었을 수도 있습니다.

+0

하지'ss.str()'단지 않습니다 다른 것 대신 문자열을 반환합니까? 그걸 너무 분명히하지 않을 것 같은데 '분명히'라고 부르는 것 같아요? – TankorSmash

+0

문자열 스트림을 잃습니다. 그것은 필요하지 않습니다. 'str.append (c) '를 사용하는 for-loop 내부의 로컬'str'이면 충분합니다. 그리고 ''은 이것을 * 많이 * 깨끗하게합니다. – WhozCraig

+0

97과 같은 숫자 대신 'A'와 같은 문자 리터럴을 사용하십시오. –

답변

1

먼저 WhozCraig에 명시된대로 stringstream을 사용할 필요가 없습니다. std::string은 필요한 모든 것을 제공합니다.

코드가 작동하지 않는 이유는 eof bitoperator>>을 통해 설정 되었기 때문입니다. stringstream::clear()을 호출하면 비트가 재설정되고 스트림을 다시 사용할 수있게됩니다.

다음은 약간 수정 한 코드입니다. 괜찮습니다. 당신이 eof에 도달했기 때문에 당신은 이제 stringstream의 상태를 재설정해야

void losuj(vector <string> &vec, int ile) 
{ 
    int i, j; 
    string str; 
    char c; 
    for(i=0; i<ile; i++) 
    { 
     for (j=0; j<5; j++) 
     { 
      c = rand() % 26 + 'A'; 
      str += c; 
     } 
     vec.push_back(str); 
     str.clear(); 
    } 
} 
+0

매력처럼 작동합니다. 고마워요. 내 버전이 작동하지 않는 이유는 무엇입니까? – eilchner

+0

설명을 위해 답변에 대한 정보와 링크를 추가했습니다. – Daerst

+0

srand (time (NULL))를 잊어 버리지 말고 발전기를 시드하십시오. –

0

: 나는 또한 토마스 매튜스가 제시 한 수정 사항을 추가

ss.clear(); 
관련 문제