题目描述
统计每个元音字母在字符串中出现的次数。
输入
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串,只由小写字母组成。
输出
对于每个测试实例输出5行,格式如下: a:num1 e:num2 i:num3 o:num4 u:num5 多个测试实例之间由一个空行隔开。 请特别注意:最后一块输出后面没有空行:)
样例输入
2 aeiou my name is ignatius
样例输出
a:1 e:1 i:1 o:1 u:1 a:2 e:1 i:3 o:0 u:1
#include<stdio.h>
#include<string.h>
int main(){
char str[100];
int n,m,j,r,len;
int num1=0,num2=0,num3=0,num4=0,num5=0;
while(scanf("%d",&n)!=EOF){
//fflush(stdin);
getchar();
for(r=0;r<n;r++){
gets(str);
for(j=0;str[j]!='\0';j++){
if(str[j]=='a'){
num1++;
}
if(str[j]=='e'){
num2++;
}
if(str[j]=='i'){
num3++;
}
if(str[j]=='o'){
num4++;
}
if(str[j]=='u'){
num5++;
}
}
printf("a:%d\n",num1);
printf("e:%d\n",num2);
printf("i:%d\n",num3);
printf("o:%d\n",num4);
printf("u:%d\n\n",num5);
num1=0,num2=0,num3=0,num4=0,num5=0;
}
}
return 0;
}
在这个问题上卡了大半天。
在使用scanf输入n值后,要按一下enter键程序才能往下走,然而这样做有一个弊端,会在程序的缓冲区留下一个\n(换行符)。
这个换行符会被gets()函数直接调用,被gets()当成是输入了,所以就无法再次输入字符串了。
我在网上搜了一下。
发现可以使用fflush(stdin)清除缓冲。
我发现确实可行。
而且程序也能得到正确的输出。
但是我提交后却不认可这个答案……
然后我又在网上找到了另外一种方法。
可以使用getchar()先调用缓冲内的\n,然后再让gets()函数进行字符串的输入。
得到正确输出。
提交也成功了。
主要的难点:理解缓冲这个概念。