C程序接受字符串输入并打印字符串中元音和大多数重复元音的数量

时间:2017-07-27 17:42:01

标签: c string frequency

我正在学习C所以我正在做不同的C编程挑战,其中一个就是这个程序。 WAP接受来自用户的字符串输入并打印否。元音和字符串中最重复的元音。

我能够计算和打印元音的数量,但是我无法弄清楚如何计算字符串中最重复的元音,虽然我可以直接在输出屏幕上打印出来,这是最重复的元音在内循环中具有vowels[i]的打印语句。但我想计算程序本身内最重复的元音,然后才能有效地打印它。我尝试了不同的东西但没有任何效果此外,我希望保持代码小而有效。有办法吗?

这是我到目前为止所做的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 150

int main()
{
    char Statement[MAX];
    char vowels[] = {'a', 'e', 'i', 'o', 'u'};
    int i, j;

    puts("Enter a simple statement.");
    fgets(Statement, 150, stdin);
    printf("\nYou entered: %s\n", Statement);
    for(i=0; i<=strlen(Statement); i++){
        //Converting uppercase input to lowercase
        Statement[i] = tolower((unsigned char)Statement[i]);
    }
    //Calling the function to print no. of 
    NumberOfVowels(Statement, vowels); vowels

    return 0;
}

    int NumberOfVowels(char Statement[], char vowels[])
    {
        int i, j, vowelsAmount = 0, count = 0;
        for(i=0; i<5; i++){                             //outer loop

                for(j=0; j<=strlen(Statement); j++){    //inner loop
                if(vowels[i] == Statement[j]){
                vowelsAmount++;
                printf("%c - ", vowels[i]);
                }
            }
        }
        printf("\nTotal number of vowels = %d", vowelsAmount);
        return vowelsAmount;
    }

1 个答案:

答案 0 :(得分:0)

您可以尝试以下任何方法......

  • 使用MAPkey作为成员创建结构value。有辅助方法,允许您将MAP结构填充为key作为vowel,值为no。 occurrences
  • 创建一个元组的二维数组,其中row代表vowels和列号。 occurrences
  • 最简单的理解是创建一个大小为256(ascii)的数组,并在每次出现时保持array[ascii(vowel)]的值增加1。

这是一个实现(我刚刚更新了你的代码,所以它的原始,请努力使它看起来很好并删除多余的打印)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 150

    int NumberOfVowels(char Statement[], char vowels[], int counts[])
    {
        int i, j = 0;

        for(j=0; j<strlen(Statement); j++) {
            if (Statement[j] == '\0' || Statement[j] == '\n') {
                continue;
            }
            for(i=0; i<5; i++) {
                if(vowels[i] == Statement[j]) {
                    int ascii = (int) vowels[i];
                    counts[ascii] = counts[ascii] + 1;
                }
            }
        }

        for(i=0; i<5; i++) {
            int ascii = (int) vowels[i];
            printf("%c - %d ", vowels[i], counts[ascii]);
        }
        printf("\n");
        return 0;
    }

int main()
{
    char Statement[MAX];
    char vowels[] = {'a', 'e', 'i', 'o', 'u'};
    int counts[256] = {0};
    int i, j;

    puts("Enter a simple statement.");
    fgets(Statement, 150, stdin);
    printf("\nYou entered: %s\n", Statement);
    for(i=0; i<=strlen(Statement); i++){
        //Converting uppercase input to lowercase
        Statement[i] = tolower((unsigned char)Statement[i]);
        printf("%c ", Statement[i]);
    }
    //Calling the function to print no. of 
    NumberOfVowels(Statement, vowels, counts);
    return 0;
}

示例运行

You entered: Hello How are you, I am fine!                                                                                                                           

h e l l o   h o w   a r e   y o u ,   i   a m   f i n e !    

  a - 2 e - 3 i - 2 o - 3 u - 1