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]);
}
好吧,我有一个 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]);
}