C语言 error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'错在哪?

#include <string.h>
#include <stdio.h>
void main( )
{
char a,str[80];
int i,j=0;
a=getchar();
for(i=0;i<80;i++)
{
scanf("%c",&str[i]);
if(str[i]=='\n')
break;
}
for(i=0;i<80;i++)
{
if(!strcmp(a,str[i]))
j++;
else
continue;
}
printf("在字符串中与%c相同的字母有%d个!",a,j);
}
错在哪?

1.你要注意了,如果你纯粹读入一个字符就应该用getchar()函数而不是scanf(),这是个习惯问题。因为如果你需要输入空格符时候scanf会认为空格用于隔开各部分数据而把空格忽略。


2.strcmp函数适用于比较字符串的,例如strcmp("hello","equal");或者是:

char *s1="hello",*s2="equal";

strcmp(s1,s2);

你的错误就是因为你比较单个字符是否相等而使用了这个函数,正确的做法是直接比较两个字符是否相等:if(a==str[i]) 而不是使用strcmp函数


3.在main函数的最后一个for里头,比较的不应该是for(i=0;i<80;i++);你怎么知道你读入的字符个数是80个?正确的是设置一个len变量,每读入一个字符,len++,在判断有多少个字符一样时,

字符串里有的字符是len个而不是80个。具体你可以看我给你的程序哈。


#include <string.h>
#include <stdio.h>

int main( )
{
    char a,str[80];
    int i,j=0;
    int len = 0;

    a=getchar();
    for(i=0;i<80;i++)
    {
        //scanf("%c",&str[i]);
        str[i] = getchar();
        len++;
        if(str[i]=='\n')
            break;
    }

    for(i=0;i<len;i++)
    {
        if(a == str[i])
             j++;
        else
             continue;
    }
    printf("在字符串中与%c相同的字母有%d个!",a,j);
    return 0;
 }

运行结果:


欢迎提问,不懂的话欢迎提问。


cannot convert parameter 1 from 'char' to 'const char *这句话的意思就是说:

不能讲参数1的char类型转换成一个地址类型,因为我们通过数组保存字符串,一般来说我们知道数组名就可以访问这个字符串,因为数组名是数组第一个元素的地址,他们在内存中是紧挨着的。因此你要判断字符串是否相等,要传递给strcmp的是一个数组的地址。而你实际传递的是一个char(一个整数)。

追问

大神!!但是我们刚开始学函数,我只是入门级的入门,,,所以有些东西看不懂。。。

追答

也正因为你是入门,所以你才会看不懂编译器提示的错误是什么意思,你比较单个字符用if(a==str[i])就对了,等到你学到数组后这些问题你理所当然的知道了,你不知道是因为你没学到这部分而已。如果日还有不懂欢迎来找我,呵呵。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-13
不明白你要做什么,不过这样改过就对了,你应该是想实现对string【i】和“a”的比较吧
#include <stdio.h>
#include <string.h>
#define MAX 20
int main (void)
{
int i, total;
int j=0;
char string[MAX];
gets (string);
total = strlen (string);
for (i=0; i<total; i++)
{
if(string[i]=='a')
{
j++;
}
}
return 0;
}追问

可以解释一下cannot convert parameter 1 from 'char' to 'const char *这是什么问题吗?我们的题目是
输入一个字符和一个以回车符结束的字符串(少于80个字符),统计字符串中与该字符相同的字母个数。
我们还没有学 return。。。目前刚开始学函数。。。有没有更通俗的解法呢

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网