而Loop不满足条件

时间:2014-04-30 11:57:17

标签: c++ c

我写了一个while循环来运行,直到找到*/。但不幸的是,我的循环一旦找到一个*本身就会退出。

while (str[++i] != '*' && str[++i] !='/' ); 

非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:6)

查看循环条件以及您希望代码执行的操作,显然是错误的。一旦while条件为false,while循环就会停止,这意味着当它为真时它会停止:

!(str[++i] != '*' && str[++i] !='/')

(str[++i] == '*' || str[++i] =='/')相同。由于短路评估,它会在遇到*时立即停止。此外,双增量副作用处理非常微妙,并且可能导致难以跟踪错误。

您还缺少对字符串结尾的检查。我建议做一些像:

while (str[i] != '\0' && !(str[i] == '*' && str[i+1] =='/')) {
    i++;
}

或者,相当于

for (; str[i] != '\0' && !(str[i] == '*' && str[i+1] =='/'); i++)
    ; /* Intentionally left blank. */

答案 1 :(得分:3)

这个结构有几个问题:

while (str[++i] != '*' && str[++i] !='/' );
  • 如果字符串结束且没有找到* /,则不会停止。
  • 如果找到*/,则循环将停止。

你可以这样做:

while (str[i]) {
    if (str[i] == '*' && str[i+1] =='/' ) {
        break;
    }
    i++
}

答案 2 :(得分:2)

使用该功能怎么样:

char *strstr(const char *s1, const char *s2);

Strstr Docs.

char *substr = strstr ( &str[i], "*/" );

我不知道你的大局是什么,但通常解析是通过分解关键词'来完成的。由白色空间隔开'进入一系列令牌。 " * /"那将是你的一个代币。您可能会发现C函数strtok值得一试。