统计元音
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 73252 Accepted Submission(s): 29055
Problem Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
请特别注意:最后一块输出后面没有空行:)
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1
a:2
e:1
i:3
o:0
u:1
Author
lcy
Source
C语言程序设计练习(四)
试题分析:
这道题虽然简单,但是有一个地方一定要注意,scanf(“%d”,&n)后面的getchar()不能省略,否则会直接跳到下一个输入,导致程序出错。scanf()函数输入后会在缓存区留下回车键,如果第二个输入函数是scanf(“%c”,…或者gets()函数,那么他们会自动从从缓存区取走剩余的’\n’;scanf(“%s”,…可以正常运行,这是因为编译器对字符串的处理是:从第一个字符不为空格、换行、回车才开始的,因此会自动删除回车符,这样就保证了取到第一个有效的字符,scanf(“%c”,…或者gets()函数后面加上getchar()是为了排除’\n’的影响。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int n,k,a,e,i,o,u,length,j;
char ch[100];
scanf("%d",&n);
getchar();
for(k=0;k<n;k++)
{
a=0;e=0;i=0;o=0;u=0;
gets(ch);
length=strlen(ch);
for(j=0;j<length;j++)
if(ch[j]=='a')a++;
else if(ch[j]=='e')e++;
else if(ch[j]=='i')i++;
else if(ch[j]=='o')o++;
else if(ch[j]=='u')u++;
printf("a:%d\n",a);
printf("e:%d\n",e);
printf("i:%d\n",i);
printf("o:%d\n",o);
printf("u:%d\n",u);
if(k<n-1)printf("\n");
}
return 0;
}