Schleife wird unendlich funktionieren, wenn str
beginnt mit ' '
, '+'
oder '-'
. Sie werden das erste Token überspringen. Um es zu vermeiden, sollten Sie nicht zwei Token vor Schleife lesen:
...
istr>> token;
string t;
// t.push_back(token); // what if it's ' ' or '+'
// istr>>token; // do not read second time
while(...
Der zweite Fall ist ein leerer str
. Sie sollten prüfen, ob es leer ist und es in diesem Fall nicht verarbeiten.
Auch wenn str
enthält keine ' '
, '+'
oder '-'
, Schleife wird nicht aufhören. Um es am Ende von istr
zu stoppen, fügen Sie Fall istr
zu While hinzu. Wenn das Ende erreicht ist, wird istr
zu false
und die Schleife stoppt.
Auch kann es tun, ohne istringstream
:
string str = ...;
string t;
for(char token: str) {
if(token == ' ' || token == '+' || token == '-')
break;
t.push_back(token);
}
Im Fall, wenn Sie von der Stelle fortsetzen möchten, wo Sie aufgehört haben, können Sie Indizes verwenden:
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]);
}
add ' istr && 'in die 'while'-Bedingung, so dass es Eingabefehler entdeckt –
Wenn Sie auf eine Zeichenfolge in cpp iterieren möchten, schauen Sie sich diese [Frage] (http://stackoverflow.com/questions/9438209/for-every-character- In-String) – Stargateur
Wenn 'istr' das Dateiende eines Fehlers erreicht, ist jedes nachfolgende' >> 'ein No-Op und schreibt nichts. Also, "Token" ist keine Änderung und die 'ẁhile'-Bedingung wird das gleiche Ergebnis bei jeder Schleife ergeben. Deshalb geht es endlos weiter. –