题目
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
代码
#include<stdio.h>
#include<string.h>
int main ()
{
char s[100];
fgets(s,sizeof(s),stdin);
char m;
scanf("%c",&m);
int sum=0;
for(int i=0;i<=strlen(s);i++){
if(s[i]==m)sum++;
}
printf("%d",sum);
return 0;
}
一个小细节:为什么fgets后面加个getchar()就错了?
原因:fgets 会在读取的字符串末尾添加一个换行符,并将其存储在字符串中。而 scanf 不会添加换行符。
一般来说,如果先scanf读取,后fgets读取的话,两次读取之间要加个getchar(),以免scanf输入完后的换行符(scanf读取到换行符时会将它留在缓存区)被fgets读取,这个getchar将换行符读取后丢弃。
但这里是fgets先读取,fgets是会将换行符读取存储到字符串最后的(不会留在缓存区),如果有getchar()以后,读取的m值就成了换行符,而没了getchar()以后,m值就是应该读取的值,所以不需要这个getchar();