C 正确的书写方式';一个但不是两个';情况如何?

C 正确的书写方式';一个但不是两个';情况如何?,c,expression,C,Expression,这个问题真的很武断,所以我会尽量解释清楚。我正在遍历两个大小未知的字符串 bool check(char *str1, char *str2) { char special = 'k'; for (int size_t i = 0; ; i++) { } } 我希望for循环的终止条件如下: 仅当str1[i]==special或str2[i]==special时,才退出循环,,但不能同时退出 对于这个问题,请忽略我可能会分段错误的

这个问题真的很武断,所以我会尽量解释清楚。我正在遍历两个大小未知的字符串

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

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

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

仅当str1[i]==special或str2[i]==special时,才退出循环,,但不能同时退出

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

我知道怎么写这个,但它总是非常混乱,而且需要使用三元条件运算符。写它的更好方法是什么?

您希望操作符写为
^
像使用一样使用它,并且
&&
|
。只有当一个参数为真,而不是两个参数都为真时,它才为真。

您希望将运算符编写为
^
像使用和
&
|
一样使用它。只有一个参数为真,而不是两个参数都为真时才为真。

您可以使用
(str1[i]==special)!=(str2[i]==特殊)
,如建议

这是因为在
c
中,
=
只能返回
int
0
1
()中的一个。

您可以使用
(str1[i]==special)!=(str2[i]==特殊)
,如建议

这是因为在
c
中,
==
只能返回
int
0
1
()中的一个。

噢,现在请参见OP的话:“对于这个问题,忽略我可能会分割错误的事实,因为我既不知道大小,也没有检查0x00。”

所以我下面的担心是没有意义的。作为推荐人离开


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

  • 如果
    (str1[i]==特殊)!=(str2[i]==特殊)
    ,但不是两者都有

  • str1[i]==0

  • str2[i]==0

  • 代码是

    for (int size_t i = 0; 
         ((str1[i] == special) != (str2[i] == special)) && str1[i] && str2[i]); 
         i++) {
      ...
    }
    
    也许可以简化一下。

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

    所以我下面的担心是没有意义的。作为推荐人离开


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

  • 如果
    (str1[i]==特殊)!=(str2[i]==特殊)
    ,但不是两者都有

  • str1[i]==0

  • str2[i]==0

  • 代码是

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

    也许可以简化一下。

    关键字:异或。(str1[i]-special)^(str2[i]-special)@BaroudiSafwene:请不要回答评论部分的问题。@BaroudiSafwene:这通常不起作用。例如,使用值1,2,3,您可以得到(2-1)^(3-1)==1^2==3==nonzero==true。关键字:异或。(str1[i]-special)^(str2[i]-special)@BaroudiSafwene:请不要回答评论部分的问题。@BaroudiSafwene:这通常不起作用。例如,使用值1,2,3,可以得到(2-1)^(3-1)==1^2==3==nonzero==true。没错<代码>(str1[i]==特殊)^(str2[i]==特殊)。简单。OP的要求是XOR的字面定义:)请扩展一下你的答案……这正是我想要的。我是怎么进入计算机科学四年级却不记得这一年的?但是,我始终使用位运算符
    &
    !我应该在离散数学课上学到更多。哦,好吧。。谢谢大家!@Hatefind:纯粹从课程中学习C语言要困难得多,因为问题是非常人为的,而且风格取决于你的导师喜欢什么。我希望在野外使用一些代码后,它将成为第二天性。祝你好运,我很高兴能帮上忙。@Vality尽管我所见过的每种语言(几乎)都有这些位运算符。我记得在《Java简介》中学习了其中的大部分:)它们只是很少使用,所以我想它们有点容易忘记。@Hatefind是的,这是真的,并不是没有实现按位运算,只是它们很少被使用,一个人不习惯它们。但在适当的场合,它们往往是一个非常优雅的回答。此外,作为一个无耻的插件,如果这有助于您解决问题,请点击“接受”按钮,以便其他查看问题的人知道这对您有效:)没错<代码>(str1[i]==特殊)^(str2[i]==特殊)。简单。OP的要求是XOR的字面定义:)请扩展一下你的答案……这正是我想要的。我是怎么进入计算机科学四年级却不记得这一年的?但是,我始终使用位运算符
    &
    !我应该在离散数学课上学到更多。哦,好吧。。谢谢大家!@Hatefind:纯粹从课程中学习C语言要困难得多,因为问题是非常人为的,而且风格取决于你的导师喜欢什么。我希望在野外使用一些代码后,它将成为第二天性。祝你好运,我很高兴能帮上忙。@Vality尽管我所见过的每种语言(几乎)都有这些位运算符。我记得在《Java简介》中学习了其中的大部分:)它们只是很少使用,所以我想它们有点容易忘记。@Hatefind是的,这是真的,并不是没有实现按位运算,只是它们很少被使用,一个人不习惯它们。但在适当的场合,它们往往是一个非常优雅的回答。此外,作为一个无耻的插件,如果这有助于您解决问题,请点击“接受”按钮,以便其他查看问题的人知道这对您有效:)