【发布时间】:2017-03-24 10:45:24
【问题描述】:
计算一个单词中元音的个数 请编写一个程序来计算输入单词列表中有多少个元音('a'、'e'、'i'、'o'、'u')。您的程序一个一个地读取单词并打印每个单词中出现的元音数量。每个单词仅由混合大小写的字母组成。程序重复这个过程,直到点击“exit”这个词(不区分大小写)。在这种情况下,在“exit”中打印元音的数量后终止程序。终止后,程序应忽略剩余的输入(如果有)。
输入:跨行的多个单词。 每个单词由不超过 50 个字符组成。 单词之间用空格隔开。
输出:每个输入单词中元音的数量,用换行符分隔。 也就是说,一行一个数字。
Sample run #1:
I
1
went
1
apple
2
school
2
by
0
BUS
1
Exit
2
Sample run #2:
I go to school
1
1
1
2
by QQ email
0
0
3
Ai yAh Oooops
2
1
4
um
1
eXiT ignore these please
2
我正在为这个程序编写代码并尝试了这个代码。它似乎给出了正确的输出,但仍然没有对我的学校代码检查器给予充分的评价。似乎是什么问题?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int isVowel(char c);
int isExit(char* c);
int main(void)
{
char s1[51];
int N, i, v = 0;
int noExit = 1;
while (noExit)
{
fgets(s1, 51, stdin);
N = strlen(s1);
for (i = 0; i < N; i++)
{
if (isExit(&s1[i]))
{
printf("2\n");
noExit = 0;
break;
}
else
{
if (isVowel(s1[i]))
{
v++;
}
else if (s1[i] == ' ' || s1[i] == '\n')
{
printf("%d\n", v);
v = 0;
}
}
}
}
return 0;
}
int isVowel(char c)
{
c = toupper(c);
if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'a'
|| c == 'e' || c == 'i' || c == 'o' || c == 'u')
return 1;
else
return 0;
}
int isExit(char* c)
{
if ((toupper(c[0]) == 'E') && (toupper(c[1]) == 'X')
&& (toupper(c[2]) == 'I') && (toupper(c[3]) == 'T'))
{
return 1;
}
else
{
return 0;
}
}
【问题讨论】:
-
每个 word 最多可包含 50 个字符。行可能更长,并且发布的代码无法正确处理更长的行。
-
你写了
c = toupper(c);,但你还在检查小写元音...... -
此外,
isExit可以解决数组越界,例如c = &s1[49]