我写了一个while循环来运行,直到找到*/
。但不幸的是,我的循环一旦找到一个*
本身就会退出。
while (str[++i] != '*' && str[++i] !='/' );
非常感谢任何帮助。谢谢。
答案 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);
char *substr = strstr ( &str[i], "*/" );
我不知道你的大局是什么,但通常解析是通过分解关键词'来完成的。由白色空间隔开'进入一系列令牌。 " * /"那将是你的一个代币。您可能会发现C函数strtok值得一试。