char 不终止 while 循环

char not terminating while loop

好吧,我有一个 while 循环继续将字符从一个字符串添加到一个新字符串,它应该在到达某个字符后终止,主要是 ' ' 但它会无休止地继续。这是程序的一部分

istringstream istr(str);
char token;
istr >> token;
string t;
t.push_back(token);
istr >> token;
while (token != ' ' && token != '+' && token != '-') {
    t.push_back(token);
    istr >> token;
}

如果 str' ''+''-' 开头,循环将无限运行。您将跳过第一个标记。为了避免它,你不应该在循环之前阅读 two 标记:

...
istr>> token;
string t;         
// t.push_back(token); // what if it's ' ' or '+'
// istr>>token; // do not read second time
while(...

第二种情况是空的str。你应该检查它是否为空并且在这种情况下不要处理它。

此外,如果 str 不包含 ' ''+''-',循环将不会停止。要在 istr 结束时停止它,请将 case 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]);
}