루프는 무한 작동의 경우 ' '
, '+'
또는 '-'
와 str
시작됩니다. 첫 번째 토큰을 건너 뜁니다. 이를 방지하기 위해 당신은 루프 전에 이 토큰을 읽을 수 없습니다해야
...
istr>> token;
string t;
// t.push_back(token); // what if it's ' ' or '+'
// istr>>token; // do not read second time
while(...
두 번째 경우는 빈 str
입니다. 이 경우 비어 있는지 확인하고 처리하지 않아야합니다.
또한 str
는 ' '
, '+'
또는 '-'
는, 루프가 멈추지 않을 것입니다 포함하지 않는 경우. istr
끝 부분에서 중지하려면 istr
을 추가하십시오. 끝까지 도달하면 istr
이 false
이되고 루프가 중지됩니다.
또한 istringstream
없이 작업을 수행 할 수 있습니다
string str = ...;
string t;
for(char token: str) {
if(token == ' ' || token == '+' || token == '-')
break;
t.push_back(token);
}
을 경우 당신은 당신이 정지 한 곳에서 계속하려는 경우, 당신은 인덱스를 사용할 수 있습니다
string str = ...;
string t;
int i = 0;
for(; i < str.size(); ++i) {
if(str[i] == ' ' || str[i] == '+' || str[i] == '-')
break;
t.push_back(str[i]);
}
// some other code
++i; // skip ' ', '+' or '-'
string t2;
for(; i < str.size(); ++i) {
if(str[i] == ' ' || str[i] == '+' || str[i] == '-')
break;
t.push_back(str[i]);
}
추가를' istr &&'while 조건으로 입력 실패를 감지하도록 –
cpp에서 문자열을 반복하려면이 [question] (http://stackoverflow.com/questions/9438209/for-every-character- 인 문자열) – Stargateur
'istr' 파일의 끝에 도달하면 실패합니다. 그 다음의'>>'는 아무 작업도하지 않고 아무것도 쓰지 않습니다. 그래서,'token'은 변경되지 않고'ẁhile' 조건은 모든 루프에서 같은 결과를 낳을 것입니다. 그것이 끝없이 계속되는 이유입니다. –