2014-08-28 7 views
0

"ABC DEF "과 같이 string과 공백이 있습니다. 나는 {"ABC" "DEF"} 같은 문자열 vector로 변환하고 싶은, 그래서 stringstream을 사용 :문자열을 단어 벡터로 분할합니다.

string s = "ABC DEF "; 
stringstream ss(s); 
string tmpstr; 
vector<string> vpos; 
while (ss.good()) 
{ 
    ss >> tmpstr; 
    vpos.push_back(tmpstr); 
} 

그러나, 결과 vpos{"ABC" "DEF" "DEF"}입니다. 왜 마지막 단어가 벡터에 복제됩니까? stringstream을 사용해야하는 경우 올바른 코드는 무엇입니까?

+0

@CaptainObvlious : 아니요. –

+0

기본 논리 :'ss.good()'는 미래를 말할 수 없습니다! –

+0

@ LightnessRacesinOrbit - 맞아. 닫기 투표가 철회되었습니다. –

답변

4

ss.good()은 지금까지 상황이 좋았는지 여부 만 알려줍니다. 다음에 읽는 것이 좋을 것이라고 말하지는 않습니다.

사용

while (ss >> tmpstr) vpos.push_back(tmpstr); 

지금 먼저 tmpstr을 읽고 다음 스트림의 상태를 검사합니다. 다음과 같습니다.

for (;;) { 
    istream &result = ss >> tmpstr; 
    if (!result) break; 
    vpos.push_back(tmpstr); 
} 
+0

답변 해 주셔서 감사합니다. 반환 값이'istream' 유형이라는 것을 알았 기 때문에'while (istream obj = ss >> tmpstr)'이라고 썼습니다.하지만 틀린 것처럼 보입니다. 그렇다면'ss >> tmpstr'의 문법은 무엇입니까? –

+0

설명해 주셔서 감사합니다! 나는 많이 배웠다. –

관련 문제