循环

时间:2016-10-28 00:43:17

标签: c++ while-loop char istringstream

好吧,我有一个while循环继续将一个字符串中的字符添加到一个新字符串中,并且它应该在它到达某个字符{... 1}时终止,但它会无休止地继续。这是程序的一部分

' '

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]);
}