c - 如何在 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;
}
解决方案
尝试用此代码将您的代码从一行替换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);
推荐阅读
- node.js - 发送电子邮件错误:错误:无效登录:454 4.7.0 登录尝试次数过多,请稍后再试。b18sm2198190pgk.36 - gsmtp
- javascript - 无法识别 iframe 中的量角器元素
- android - (Android) 在 View 上放置 ProgressBar
- python - 无法抑制解释返回的 UserWarning
- python-3.x - 从一系列熊猫创建列表
- python - Celery worker - ConnectionResetError: [WinError 10054] 现有连接被远程主机强行关闭
- html - 如何将格式应用于电子邮件中的 HTML 表格?
- amazon-s3 - Lambda即使拥有必要的权限也被拒绝访问
- kubernetes - 使用 Flux 和 Terraform 的 Kubernetes 秘密
- monaco-editor - 在悬停消息中不显示 marker.message 和 marker.code