这是我的代码,用于查找用户在给定字符串中输入的子字符串。在字符串中查找子字符串
bool find_str(char *str, char const *substr) {
while(*str) {
if(*str++ == *substr) {
char const *a = substr;
while((*str++ == *++a)); /*empty*/
if(*a == '\0')
return true;
}
}
return false;
}
// If match found, then return true, else false
int main(void) {
printf("%d", find_str("ABCDEF", "CDE")); /* Return true in this case */
printf("%d", find_str("ABCDE", "CDE")); /* Return false in this case */
}
正如注释中所述,只要以附加字符结尾,就会返回true。如果不是,则返回false。我认为增量/减量运算符存在问题。但我怎么找不到?
* str ++,* ++ a,让我想到了试图记住运算符优先级的难题。我不喜欢记忆的事情。请注释它或添加一些括号()。 – John3136 2013-05-13 02:06:20
在这里它是如何工作的,首先它比较A和C,然后用B和C直到C == C,所以在嵌套的同时它会增加一个副作用使得D == D和E == E。(* + +第一个指向D,而* str ++也指向D,但在之后递增) – 2013-05-13 02:07:38
这不是代码评论网站。无论如何,'strstr'这样做 - 10秒google-foo,你可以找到实现,例如http://www.opensource.apple.com/source/xnu/xnu-792.13.8/libsa/strstr.c。在你的代码中,有一些错误:为了学习找到它们,我建议把类似'printf('''%s'=?='%s'\ n“,str,a)比较...你很快就会看到你真正的比较和意识到什么是错误的,然后你可以推理和试验来解决它。提示:正如苹果所做的那样,保持这种“匹配”的逻辑与“随处查看”分开:“strncmp”。 – 2013-05-13 02:17:16