gpt4 book ai didi

C语言——统计不同元音的个数,无指针,无附加函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:36 26 4
gpt4 key购买 nike

我得到了这个我没能解决的练习,重点是创建一个程序,你在其中输入文本,然后程序分析文本的每个单词并计算每个单词的元音,然后程序在屏幕上返回具有 3 个或更多不同元音的单词的数量,不同的意思是,如果单词有 3 个“a”并不重要,它只算一个(单词有元音“a” , 多少次都没有关系),所以例如,单词“above”有 3 个元音,单词“been”有 1 个元音,单词“example”有 2 个元音。元音字母可以是大写或小写,没关系,这里是棘手的部分:它不能包含我们制作的任何指针或函数。

我所做的是要求用户逐字输入,以便程序分析每个字,然后在最后返回包含 3 个或更多元音的字数,但我觉得必须有更简单的方法用户可以键入完整的段落或文本,然后程序分析每个单词并返回具有 3 个或更多不同元音的单词数。

无论如何,我的代码如下,任何建议将不胜感激:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main() {

int vowels, text, words, c, total=0,a=0,e=0,i=0,o=0,u=0;


printf ("How many words does your text has? ");
scanf("%d",&words);

for(c=1;c<=words;c++){

printf("Type your word %d, after that press enter, then press 'control' and 'z' at the same time, and then press enter again: \n", c);

while (EOF != (text=getchar())){

if (text == 'a' || text == 'A'){
a++;
if (a >=2){
a = 1;
}
}

if (text == 'e' || text == 'E'){
e++;
if (e >=2){
e = 1;
}
}

if (text == 'i' || text == 'I'){
i++;
if (i >=2){
i = 1;
}
}

if (text == 'o' || text == 'O'){
o++;
if (o >=2){
o = 1;
}
}

if (text == 'u' || text == 'U'){
u++;
if (u >=2){
u = 1;
}
}
}

vowels = a+e+i+o+u;

if(vowels >=3){
total = total +1;
}

a=0,e=0,i=0,o=0,u=0;
vowels = 0;
}

printf("\n\nThe total of words with 3 or more vowels is: %d", total);
printf("\n");

total=0;

return 0;
}

最佳答案

为了读取和分析单个单词或段落单词以确定包含至少三个不同元音(无论如何)的单词数量,这是使用 读取输入时罕见的情况之一scanf(使用 '%s' 格式说明符)实际上是一个合理的选择。

回想一下 '%s' 格式说明符 将读取字符直到第一个空格。这为您提供了一种从 stdin 一次读取一个单词的简单方法。要结束输入,用户只需通过输入ctrl+d(或Windows 上的ctrl+z)生成一个EOF。这满足您的段落要求。

对于解析,您可以利用将每个字符转换为小写来简化元音检查。使用 5 元素的频率数组提供了一种简单的方法来跟踪在每个单词中发现的不同元音的数量。然后,在增加具有三个不同元音的单词的总字数之前,您只需要进行最终测试,看看找到的元音数量是否等于所需数量。

一个简单的实现类似于:

#include <stdio.h>

enum { NREQD = 3, NVOWEL = 5, MAXC = 128 }; /* declare constants */

int main (void) {

char word[MAXC] = ""; /* word buffer */
size_t wordcnt = 0; /* words with 3 different vowels */

printf ("enter a word(s) below, [ctrl+d on blank line to end]\n");
for (;;) {
int vowels[NVOWEL] = {0}, /* frequency array */
vowelcnt = 0, /* vowels per-word */
rtn; /* scanf return */
if ((rtn = scanf ("%127s", word)) == EOF) /* chk EOF */
break;
for (int i = 0; word[i]; i++) { /* loop over each char */
if ('A' <= word[i] && word[i] <= 'Z') /* check upper */
word[i] ^= 'a' - 'A'; /* convert to lower */
switch (word[i]) { /* check if vowel */
case 'a': vowels[0] = 1; break;
case 'e': vowels[1] = 1; break;
case 'i': vowels[2] = 1; break;
case 'o': vowels[3] = 1; break;
case 'u': vowels[4] = 1; break;
}
}
for (int i = 0; i < NVOWEL; i++) /* loop over array */
if (vowels[i]) /* check index */
vowelcnt++; /* increment vowelcnt */
if (vowelcnt >= NREQD) /* do we have at least 3 vowels? */
wordcnt++; /* increment wordcnt */
}

printf ("\nThere are %zu words with %d different vowels.\n",
wordcnt, NREQD);
}

示例使用/输出

$ ./bin/vowelcnt
enter a word(s) below, [ctrl+d on blank line to end]
Everyone Understands That The Dictionary Doesn't Track
Words That Contain Vowels Like It Does Etimology.

There are 4 words with 3 different vowels.

检查一下,如果您还有其他问题,请告诉我。

关于C语言——统计不同元音的个数,无指针,无附加函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091380/

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