我需要编写一个程序来计算输入单词列表中有多少元音('a','e','i','o','u')。我的程序逐个读取单词并打印每个单词中出现的元音数量。每个单词仅包含混合大小写的字母。该程序重复此过程,直到单击“退出”(不区分大小写)。在这种情况下,在“退出”中打印元音数后终止程序。终止后,程序应忽略剩余的输入(如果有的话)。
输入:跨越行的多个单词。 每个单词不得超过50个字符。 单词用空格分隔。
输出:每个输入字中的元音数,由换行符分隔。 也就是说,一行上有一个数字。
预期输入输出示例
输入:
我去BUS上学
退出
输出:
1
1
1
2
0
1
2
另一个输入:
我
去
苹果
学
通过
BUS
退出
输出:
1
1
2
2
0
1
2
我遇到问题"时间限制超过"我很感激对我的计划的任何反馈
当我输入时:
我去BUS上学
我收到通知时间限制超出和输出:
1
1
1
2
0
1
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[51], ex[5];
int N, i, v, newline=1;
while(newline){
fgets( s1, 51, stdin);
if((s1[0]=='e' || s1[0]=='E')&&(s1[1]=='x' || s1[1]=='X')&&(s1[2]=='i' || s1[2]=='I')&&(s1[3]=='t' || s1[3]=='T')&&(s1[4]=='\0' || s1[4]==' ')){
printf("2\n"); // to check whether the input is Exit
newline=0;
}
else{
N=strlen(s1);
for(i=0;i<N;i++){
if(s1[i]=='a' || s1[i]=='o' || s1[i]=='e' || s1[i]=='i' || s1[i]=='u' || s1[i]=='A' || s1[i]=='O' || s1[i]=='E' || s1[i]=='I' || s1[i]=='U'){
v++; // to calculate the number of vowels
}
if(s1[i+1]==' '){ // if next entry is spacebar, print the number of vowels in the current word and add i so that next loop will start on new word
printf("%d\n", v);
v=0;
i++;
}
else if(s1[i+1]=='\n'){ // if next entry is new line, print the number of vowels in the current word, restart the whole program by exiting the for loop
printf("%d\n", v);
v=0;
newline=1;
break;
}
}
}
}
return 0;
}
答案 0 :(得分:1)
你应该回顾一些事情:
比较char时,不区分大小写,很容易做到:
char c1, c2;
if ( toupper(c1) == toupper(c1) ) {
do_something();
}
要退出循环,我会使用break;
代替return;
整个代码就是这样:
#include <stdio.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' )
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;
}
}
答案 1 :(得分:0)
你有一个无限循环。 newline
永远不会是0.而外部的while循环永远不会退出。
因此,您需要将最后一个if条件中的newline=1
更改为newline=0
。
此外,变量v
未初始化,因此您无法正确获得第一个答案。您应该在while循环开始之前设置v=0
。