当前位置: 首页 > 知识库问答 >
问题:

如何打印辅音比元音多的字符串?

伊温书
2023-03-14

输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次。

我相信问题出在我的 if 循环中,但不知何故我不明白为什么它不能正常工作。它会打印我输入的每个字符串。

这是我写的代码:

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


    int main(void) {

    char string[20][50];
    int i, j;
    int vowels=0;
    int consonants=0;
    int repeated_r=0;

    printf("Enter the array of 20 strings:\n");

    for(i=0;i<20;i++){
        gets(string[i]);
        }

    for(i=0;i<20;i++){
        for(j=0;j<50;j++){

            if(string[i][j] == 'r'){
                repeated_r++;
            }
            else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
                vowels++;
            }
            else{
                consonants++;
            }

        }
        if(consonants>vowels && repeated_r>=3){

            fflush(stdin);
            puts(string[i]);
        }
    }


    return 0;
}    

共有3个答案

姬博瀚
2023-03-14

你的代码中还有一个问题,ypu正在使用get。它还会包括空格,所以如果你的字符串是“__rrrbaeeeeiou_”。它会打印这个字符串,但实际上这个字符串不应该被打印出来。请注意,“”意味着一个空格。根据你的代码,“_”将被计算为辅音,即使你的字符串中有4个辅音(3个r和1 b)和8个元音,它也会打印这个字符串作为输出,因为空格将被计算为辅音。同样在你的代码中,r不被计算为辅音

诸嘉澍
2023-03-14

您没有重置外部循环中变量的初始值

int vowels=0;
int consonants=0;
int repeated_r=0;

也是内循环中的条件

for(j=0;j<50;j++){
        ^^^^

不正确,因为在这种情况下,除了数组中存储的字符串之外,还有对内存的访问。

字母'r'不算作辅音。

请考虑函数get不是标准的C函数,因为C标准不再支持它。

这通电话

fflush(stdin);

具有未定义的行为。

我可以建议以下解决方案,如下面的演示程序所示。

#include <stdio.h>
#include <string.h>

int main( void ) 
{
    enum { M = 3, N = 50 };
    char s[M][N];

    for ( size_t i = 0; i < M; i++ )
    {
        fgets( s[i], N, stdin );
        s[i][strcspn( s[i], "\n" )] = '\0';
    }

    const char *vowels = "aeiou";
    const char r = 'r';

    for ( size_t i = 0; i < M; i++ )
    {
        size_t repeated_r = 0;
        size_t vowels_count = 0;
        size_t n = strlen( s[i] );

        for ( size_t j = 0; j < n; j++ )
        {
            repeated_r += s[i][j] == r;
            vowels_count += strchr( vowels, s[i][j] ) != NULL;
        }

        if ( repeated_r >= 3 && vowels_count < n - vowels_count )
        {
            puts( s[i] );
        }
    }

    return 0;
}

如果输入以下字符串

    Hello World
    errors
    photosynthesis_bro

那么程序输出可能看起来像

errors
都乐逸
2023-03-14

您需要在处理每个字符串后重置计数器。

并且不要使用 get 使用费吉特

for(i=0;i<20;i++){
    for(j=0;j<50;j++){

        if(string[i][j] == 'r'){
            repeated_r++;
        }
        else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
            vowels++;
        }
        else{
            consonants++;
        }

    }
    if(consonants>vowels && repeated_r>3){

        fflush(stdin);
        puts(string[i]);
    }

   //Reset the counters
    consonants =0;
    vowels =0;
    repeated_r =0;
  }
 }

另请注意,在您当前的代码中,r 不被视为辅音。

 类似资料:
  • 我希望用户能够输入一段字符串(我知道该怎么做) 然后我想让Python计算每个元音(aeiou)使用了多少次。 在计算了每个元音使用的次数后,我需要程序返回最少使用的元音,至少使用一次。如果没有使用元音,就不应该返回。如果最少使用的数量相同,则两者都应退回。 如果没有使用元音,它应该打印一个错误代码“没有使用元音”(我知道怎么做) 例如:如果这是元音在一个句子中使用的次数: 它应该打印“最少使用的

  • 我做了一个程序来计算输入字符串中元音和辅音的数量: 当“y”本身是辅音时,它应该是元音。我在哪里陈述?

  • 我正在研究一个程序,可以计算字符串中元音的数量。我有它的工作,但如果Y后面跟着一个辅音,我就无法计算Y。我的VOWEL_GROUP是“AEIOUAEOU”,它返回普通元音的数量,但不返回“y”。我让它看看charAt(I),看看它是否被元音组中的字符以外的其他字符所取代。谢谢你的帮助。以下是显示错误的输入和输出

  • 本文向大家介绍如何在Python中检测元音与辅音?,包括了如何在Python中检测元音与辅音?的使用技巧和注意事项,需要的朋友参考一下 首先,您应该检查字符是否为字母。然后,您可以创建一个元音列表,并使用该列表检查字符是否为元音。如果没有,那一定是辅音。例如, 这将给出输出:

  • JAVA: 编写一个类,其中构造函数接受一个String对象作为其参数。该类应该有一个方法返回字符串中元音的数量,另一个方法返回字符串中辅音的数量。(空格既不计元音也不计辅音,应该忽略。) 在执行以下步骤的程序中演示该类: 要求用户输入字符串 程序显示以下菜单: a、 计算字符串中元音的数量。 b、 数一数字符串中的辅音数 c、 数一数字符串中的元音和辅音 d、 输入另一个字符串 e、 退出程序

  • 样本输出字符串:检测到汉娜输出元音的最后一部分:检测到辅音:h n n h