gpt4 book ai didi

计算给定单词输入中的元音数量

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:55 24 4
gpt4 key购买 nike

计算单词中元音的个数请编写一个程序来计算输入单词列表中有多少个元音字母(‘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;
}
}

最佳答案

有多个问题可以解释较低的分数:

  • 您将自己限制在 50 个字符的行内。学校测试运行可能会有更长的行,您可能会处理不当。规范说单词限制在 50 个字符以内,但行可能会更长。您应该使用 scanf() 一次读取一个单词。
  • 只要看到序列 exit 就退出程序,即使在单词的中间,这也太强了,不需要:你所说的要求是 程序重复这个处理直到遇到单词 exit(不区分大小写)。在这种情况下,在 exit 中打印元音数后终止程序。
  • 您使用 toupper(c),其中 c 的类型为 char。如果 c 为负数,这有潜在的未定义行为。
  • 您在 isVowel() 中将字符大写,但仍将其与小写元音进行比较。
  • cchar * 名称的错误选择,最好使用 sstr

这是一个更简单的版本:

#include <ctype.h>
#include <stdio.h>

int isVowel(char c);
int isExit(const char *c);

int main(void) {
char s1[51];
int i, v;

while (scanf("%50s", s1) == 1) {
for (i = v = 0; s1[i] != '\0'; i++) {
if (isVowel(s1[i])) {
v++;
}
}
printf("%d\n", v);
if (isExit(s1))
break;
}
return 0;
}

int isVowel(char c) {
c = toupper((unsigned char)c);
return (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');
}

int isExit(const char *s) {
return (toupper((unsigned char)s[0]) == 'E'
&& toupper((unsigned char)s[1]) == 'X'
&& toupper((unsigned char)s[2]) == 'I'
&& toupper((unsigned char)s[3]) == 'T'
&& s[4] == '\0');
}

关于计算给定单词输入中的元音数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com