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

#include<string.h>#include<stdio.h>voidmain(){chara,str[80];inti,j=0;a=getchar();for(... #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);
}
错在哪?
展开
 我来答
451006071
2014-11-13 · TA获得超过1332个赞
知道小有建树答主
回答量:368
采纳率:57%
帮助的人:326万
展开全部

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])就对了,等到你学到数组后这些问题你理所当然的知道了,你不知道是因为你没学到这部分而已。如果日还有不懂欢迎来找我,呵呵。
爱洁哥6694
2014-11-13 · 超过62用户采纳过TA的回答
知道答主
回答量:107
采纳率:0%
帮助的人:116万
展开全部
不明白你要做什么,不过这样改过就对了,你应该是想实现对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。。。目前刚开始学函数。。。有没有更通俗的解法呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式