比较C中的字符

时间:2015-05-04 20:53:18

标签: c function character

我有一个关于在函数内比较C中字符串的单个字符的问题。 代码如下所示:

int fq(char *s1){
int i;
for(i=0;i<strlen(s1);i++){
    if(s1[i]=="?"){
        printf("yes");
    }
}
return 1;
}

即使s1 =“???”它永远不会打印出来。我设法解决了这个问题,但我很好奇为什么它以一种方式工作而不是另一种方式。 这是一段有效的代码:

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;
}

4 个答案:

答案 0 :(得分:5)

因为第一个样本比较地址而不是字符。

c和==运算符在应用于数组或指针时没有字符串类型,比较地址而不是内容。

你的功能会像这样正确地写出来

int fq(char *s1,char *s2)
{
    int i;
    for (i = 0 ; s1[i] ; ++i)
    {
        if (s1[i] == 'q')
            printf("yes");
    }

    return 1;
}

您可以将s1[i]'q'进行比较。

答案 1 :(得分:4)

"?"不是char,而只是一个char

的字符串

'?'是一个字符,应该在s1[i] == '?'

中返回true

答案 2 :(得分:1)

if(s1[i]=="?"){

不是检查s1[i]是否为字符'?'的正确语法。它必须是:

if(s1[i] == '?'){

您可能想要研究如何更改编译器设置,以便在代码库中存在此类表达式时收到警告。

使用选项-Wallgcc,我收到以下消息:

cc -Wall    soc.c   -o soc
soc.c: In function ‘fq’:
soc.c:7:15: warning: comparison between pointer and integer
       if(s1[i]=="?"){
               ^
soc.c:7:15: warning: comparison with string literal results in unspecified behavior [-Waddress]

答案 3 :(得分:0)

在C字符数组中,即字符串的语法为&#34;&#34;。对于单个字符,语法为&#39;&#39;。

在您的情况下:它应该是:if(s1[i]=='?')

如果你想以字符串形式比较它,你需要strcmp。因为&#39; ==&#39;运算符无法比较C中的字符串。

要比较我们可以使用的两个字符串:if(!strcmp(s1,q))

对于此操作,您需要添加string.h标头,如:#include <string.h>

将字符串与&#39; ==&#39;进行比较操作员需要重载操作员。但是,C不支持运算符重载。为此,您可以使用C ++语言。