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是的,这是真的,并不是没有实现按位运算,只是它们很少被使用,一个人不习惯它们。但在适当的场合,它们往往是一个非常优雅的回答。此外,作为一个无耻的插件,如果这有助于您解决问题,请点击“接受”按钮,以便其他查看问题的人知道这对您有效:)