写“一个但不是两个”情况的正确方法?

时间:2016-09-01 21:53:27

标签: c expression

这个问题非常随意,所以我会尽力解释。我正在循环两个未知大小的字符串。

bool check(char *str1, char *str2)
{
    char special = 'k';

    for (int size_t i = 0;              ; i++)
    {

    }
}

我希望for循环的终止条件如下:

只有当str1 [i] ==特殊OR str2 [i] ==特殊,但不是两者时才离开循环。

对于这个问题,忽略我可能会分段错误的事实,因为我既不知道大小,也不知道0x00

我知道怎么写这个但是它总是非常混乱并涉及使用三元条件运算符。什么是更好的写作方式?

3 个答案:

答案 0 :(得分:6)

您可以按照建议使用(str1[i] == special) != (str2[i] == special) here

这是有效的,因为在c中,==只能返回int01reference)中的一个。< / p>

答案 1 :(得分:5)

您希望^运算符编写为&&,就像您和||awk '{ $(NF-8+1) = ""; NF -= 8; print }' 一样使用它。只有当一个但不是两个参数都成立时才是真的。

答案 2 :(得分:0)

糟糕:现在看到OP说“对于这个问题,忽略我可能会分段错误的事实,因为我既不知道大小也不知道我是否检查0x00。”

所以下面我的担心没有实际意义。留下作为参考。

由于代码使用字符串,循环必须在3个条件下终止:

  1. 如果(str1[i] == special) != (str2[i] == special),则不要同时离开循环。

  2. str1[i] == 0

  3. str2[i] == 0

  4. 代码为

    for (int size_t i = 0; 
         ((str1[i] == special) != (str2[i] == special)) && str1[i] && str2[i]); 
         i++) {
      ...
    }
    

    也许可以进行简化。