だループが無限に動作します。最初のトークンをスキップします。それを避けるために、あなたは、ループの前のトークンを読んではいけません。
...
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
をwhileに追加します。終了に達すると、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'条件はすべてのループで同じ結果をもたらします。だからそれは無限に続くのです。 –