首页 > 解决方案 > 如何在 C 中进行字长和元音计数器

问题描述

我的任务是使用 C 编程编写一个程序,该程序从用户那里获取单词列表作为输入,并输出提供的最大和最小单词。您的解决方案还必须输出两个单词中元音的数量。您必须在代码中使用函数

· 用这个测试你的代码,从下面的列表中输入 10 个国家作为输入:[阿根廷、澳大利亚、巴西、加拿大、中国、法国、德国、印度、印度尼西亚、意大利、日本、大韩民国、墨西哥、俄罗斯、沙特阿拉伯, 南非, 土耳其, 英国, 美国, 英国]

该程序正在正确打印最大的单词和最小的单词,我也使用过函数

但是最大单词和最小单词之间的元音数量存在问题。

没有错误,但问题是当程序执行时它会打印最大的单词,然后是最大单词的元音数。但是当涉及到最小的单词时,它基本上会打印与最大单词相同数量的元音。

例如:如果我进入阿根廷、澳大利亚、巴西、加拿大、中国、法国、德国、印度、印度尼西亚、意大利等 10 个国家/地区

编译器说:

最大的单词是 Argentina 字符串中元音的数目 Argentina 是 4 最小的单词是 China 字符串中的元音数目 China 是 4

但是中国的元音数量是2而不是4

我试过的:

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

/*GLOBAL METHOD DECLARATION*/
int isVowel(char c);

int main()
{
    /*LINE 11 TO LINE 20 ARE USED TO DELCARE MY VARIABLES*/
    int i=0;
    int j=0;
    int k=0;
    int a;
    int minIndex=0;
    int maxIndex=0;
    int max=0;
    int min=0;

    char countries[100],lswords[100][100];


    printf("**********WORD LENGTH AND VOWELS COUNTER**********\n");

    printf("\n***THIS PROGRAM GETS A LIST OF WORDS FROM THE USER AS INPUT AND,\n");
    printf("OUTPUTS THE LARGEST AND THE SMALLEST WORD PROVIDED");
    printf("\nYOUR PROGRAM ALSO MUST OUTPUT THE NUMBER OF VOWELS IN BOTH WORDS\n");

    printf("\n\tHERE'S A LIST OF 10 COUNTRIES:\n\t");
    printf("\n\tARGENTINA,AUSTRALIA, BRAZIL, CANADA, CHINA, FRANCE, GERMANY, INDIA, INDONESIA, ITALY,\n\t");
    printf("\n\tJAPAN, REPUBLIC OF KOREA, MEXICO, RUSSIA, SAUDI ARABIA, SOUTH AFRICA, TURKEY, UK, USA\n\t");

    printf("\nENTER 10 COUNTRIES FROM THE LIST ABOVE AS AN EXAMPLE OF AN INPUT:\n");
    printf("\n");
    gets(countries); /*THIS ALLOWS THE USER TO INPUT A STRING AND STORES THE DATA IN COUNTRIES*/

    while(countries[k]!='\0') /*THIS IS USED TO SPLIT THE SENTENCES*/
    {
        j=0;
        while(countries[k]!=' '&&countries[k]!='\0')
        {
            lswords[i][j]=countries[k];
            k++;
            j++;

        }
        lswords[i][j]='\0';
        i++;
        if(countries[k]!='\0')
        {
            k++;
        }
    }
    int len=i;
    max=strlen(lswords[0]);
    min=strlen(lswords[0]);

    /*LINE 60 TO 72 IS USED AFTER SPLITTING THE LENGTH OF STRING*/
    /*AND FINDING ITS INDEX USING MAX LENGTH AND MIN LENGTH*/
    for(i=0;i<len;i++)
    {
       a=strlen(lswords[i]);
       if(a>max)
        {
            max=a;
            maxIndex=i;
        }
        if(a<min)
        {
            min=a;
            minIndex=i;
        }
    }

    int counter =0;
    int v=0;

    while(lswords[maxIndex&&minIndex][v]!='\0')
    {
        if(isVowel(lswords[maxIndex&&minIndex][v]))
        counter++;

        v++;
    }

    printf("\nTHE LARGEST WORD IS: %s\n", lswords[maxIndex]);
    printf("\nTHE NUMBER OF VOWELS IN THE STRING '%s' is: %d\n", lswords[maxIndex],counter);
    printf("\nTHE SMALLEST WORD IS: %s\n",lswords[minIndex]);
    printf("\nTHE NUMBER OF VOWELS IN THE STRING '%s' is: %d\n", lswords[minIndex],counter);

    return 0;
}

int isVowel(char c)
{
   char vowels[]= {'a', 'e','i','o','u','A','E','I','O','U'};
   int v;

   for(v=0;v<=9;v++)
   {
       if(c==vowels[v])
        return 1;
   }
   return 0;
}

标签: c

解决方案


尝试用此代码将您的代码从一行替换int counter =0;到另一行printf("\nTHE NUMBER OF VOWELS IN THE STRING '%s' is: %d\n", lswords[minIndex],counter);

int counter1=0, counter2=0;
int v=0;

while(lswords[maxIndex][v]!='\0')
{
    if(isVowel(lswords[minIndex][v]))
        counter1++;
    v++;
}

v=0;

while(lswords[minIndex][v]!='\0')
{
    if(isVowel(lswords[minIndex][v]))
        counter2++;
    v++;
}

printf("\nTHE LARGEST WORD IS: %s\n", lswords[maxIndex]);
printf("\nTHE NUMBER OF VOWELS IN THE STRING '%s' is: %d\n", lswords[maxIndex],counter1);
printf("\nTHE SMALLEST WORD IS: %s\n",lswords[minIndex]);
printf("\nTHE NUMBER OF VOWELS IN THE STRING '%s' is: %d\n", lswords[minIndex],counter2);

推荐阅读