Loop будет работать бесконечна, если 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, посмотрите этот [вопрос] (http://stackoverflow.com/questions/9438209/for-every-character- в струне) – Stargateur
Если 'istr' достигает конца файла, есть какой-либо сбой, любой последующий' '' '' 'не-op и ничего не пишет. Таким образом, «токен» не изменяется, и условие «ẁhile» даст тот же результат в каждом цикле. Вот почему он продолжается бесконечно. –