好吧,我有一个while循环继续将一个字符串中的字符添加到一个新字符串中,并且它应该在它到达某个字符{... 1}时终止,但它会无休止地继续。这是程序的一部分
' '
答案 0 :(得分:3)
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
添加到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]);
}