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

Hat*_*end 1 c expression

这个问题确实是随意的,所以我会尽力解释它.我正在循环两个未知大小的字符串.

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

只有当str1 [i] ==特殊OR str2 [i] ==特殊时才离开循环,但不能同时保留两者.

对于这个问题,忽略我可能会分段故障的事实,因为我既不知道大小也不知道我要检查0x00.

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

mh8*_*020 6

您可以使用(str1[i] == special) != (str2[i] == special),如此处所示.

这有效,因为在c,==只能返回其中一个int01(引用).


Val*_*ity 5

您希望将XOR运算符编写为^使用它,就像您和&&/或||.只有当一个但不是两个参数都成立时才是真的.

  • 那就对了.`(str1 [i] == special)^(str2 [i] == special)`.Simples.OP的要求字面上是XOR的定义:)请稍微扩展你的答案...... (2认同)