本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
分析:
- 声明一个字符数组
s
,长度为80,用来存储输入的字符串。 - 使用
gets(s)
函数读取一行字符串输入,存入s
中。 - 声明一个整数
g
,初值为0,用来计数与cnt[0]
相同的字符的个数。 - 声明一个字符数组
cnt
,长度为1,用来存储要比较的字符。 - 使用
scanf("%c",&cnt[i])
读取一个字符,存入cnt[0]
中。 - 使用
for
循环遍历字符串s
中的每一个字符,比较其是否与cnt[0]
相同。 - 如果相同,将
g
加1。 - 使用
printf("%d",g)
打印计数结果。 - 程序结束,返回0。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[80];
gets(s);
int g=0;
char cnt[1];
for(int i=0;i<1;i++)
{
scanf("%c",&cnt[i]);
}
for(int i=0;i<strlen(s);i++)
{
if(s[i]==cnt[0])
{
g++;
}
}
printf("%d",g);
return 0;
}
总结:
这段代码存在一个问题,它只读取了一个字符存入cnt
数组,然后却试图访问cnt[1]
,这会导致数组越界的错误。正确的做法应该是用一个字符变量接收输入,如:char cnt = getchar();
。然后后面的比较操作只需要用if(s[i]==cnt)
就可以了。