size_t pos = 0;
int n;
char c;
string temp("x^3+4*x^)8");
do
{
pos = temp.find('^',pos);
/*code*/
pos++;
}while(pos <= temp.npos +1);
//if temp.find didn't find '^' it will return npos (2^32)
它应该做的是在^
中找到temp
并将其位置返回到pos
,执行代码并增加pos
,重复循环,如果条件是真的。如果pos <= temp.npos+1
条件为真,即如果temp.find()
在字符串中找不到任何^
,它将从循环中断开。
但是当我调试时,即使条件为真,调试器也会在退出之前执行一次do循环。
我所知道的是npos = -1
,但在我的代码中,当我调试它时,它会给我一些其他内容。
答案 0 :(得分:3)
npos + 1可能溢出(因为我认为它应该类似于MAX_UINT)然后它(当然)比任何东西都要小。
答案 1 :(得分:2)
npos
定义为size_t npos = -1;
npos + 1
导致溢出,而不是2 ^ 64,它将为零。
如果您想这样做,我建议您检查pos < temp.length()
。
修正:
另外,您应该在找到后立即检查pos = temp.npos
并从周期中调用break
以防止在找不到任何内容时处理位置。
答案 2 :(得分:1)
npos
是最大的无符号整数。 npos + 1
为零且pos >= 0
。如果temp.find()
返回索引0
,则循环将重复。
您可以将循环更改为
do {
pos = temp.find('^',pos);
/*code*/
pos++;
} while(pos != temp.npos);
因为pos > temp.npos
永远不可能。