我想询问在C语言的函数中如何比较字符串中的单个字符。 代码如下:
int fq(char *s1){
int i;
for(i=0;i<strlen(s1);i++){
if(s1[i]=="?"){
printf("yes");
}
}
return 1;
}
即使s1="???",它也永远不会输出yes。我已经解决了这个问题,但我很好奇为什么一种方法有效而另一种方法无效。 下面是有效的代码:
int fq(char *s1,char *s2){
int i;
char q[]="?";
for(i=0;i<strlen(s1);i++){
if(s1[i]==q[0]){
printf("yes");
}
}
return 1;
}
s1
的声明吗? - Javia1492for(i=0;i<strlen(s1);i++)
很糟糕,因为你在每次迭代中都要遍历整个字符串,这个for (i = 0 ; s1[i] != '\0' ; ++i)
会好得多。此外,只需要做if (s1[i] == 'q')
就足够了,而问题必须出在你初始化s1
的地方。 - Iharob Al Asimistrlen()
返回字符串的大小,因此技术上他的for循环将运行他的字符串长度的大小。 - Javia1492strlen
时,它也会迭代字符串以查找\0
。除非优化级别足够高,并且您使用const
告诉编译器字符串不会改变。 - Mr Listerstrlen
。是这样吗? - Javia1492