这个问题非常随意,所以我会尽力解释。我正在循环两个未知大小的字符串。
bool check(char *str1, char *str2)
{
char special = 'k';
for (int size_t i = 0; ; i++)
{
}
}
我希望for循环的终止条件如下:
只有当str1 [i] ==特殊OR str2 [i] ==特殊,但不是两者时才离开循环。
对于这个问题,忽略我可能会分段错误的事实,因为我既不知道大小,也不知道0x00
。
我知道怎么写这个但是它总是非常混乱并涉及使用三元条件运算符。什么是更好的写作方式?
答案 0 :(得分:6)
您可以按照建议使用(str1[i] == special) != (str2[i] == special)
here。
这是有效的,因为在c
中,==
只能返回int
值0
或1
(reference)中的一个。< / p>
答案 1 :(得分:5)
您希望^
运算符编写为&&
,就像您和||
或awk '{ $(NF-8+1) = ""; NF -= 8; print }'
一样使用它。只有当一个但不是两个参数都成立时才是真的。
答案 2 :(得分:0)
糟糕:现在看到OP说“对于这个问题,忽略我可能会分段错误的事实,因为我既不知道大小也不知道我是否检查0x00。”
所以下面我的担心没有实际意义。留下作为参考。
由于代码使用字符串,循环必须在3个条件下终止:
如果(str1[i] == special) != (str2[i] == special)
,则不要同时离开循环。
str1[i] == 0
。
str2[i] == 0
。
代码为
for (int size_t i = 0;
((str1[i] == special) != (str2[i] == special)) && str1[i] && str2[i]);
i++) {
...
}
也许可以进行简化。