C语言 error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'错在哪?
#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])就对了,等到你学到数组后这些问题你理所当然的知道了,你不知道是因为你没学到这部分而已。如果日还有不懂欢迎来找我,呵呵。
#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。。。目前刚开始学函数。。。有没有更通俗的解法呢