我需要将'n'个字符串作为输入来查找哪个字符串有更多的元音。(取n个字符串)。已结束的字符串数组但失败了。任何帮助!
答案 0 :(得分:3)
问题涉及" n输入"没有明确的最大数字指标,你应该问自己两件事:
1)我是否需要保留整个列表来执行任务?
2)如果我需要保留整个列表,我有哪些性能限制?
在您给出的示例中,听起来您不需要保留整个列表来执行任务 - 没有人要求您在任何时候显示整个列表,只是为了跟踪列表末尾元音最多的字符串。
听起来你应该有两个字符串 - 你正在评估的字符串和当前最高字符串。
您正在尝试执行的操作的伪代码听起来像这样:
highest_vowels = -1
while there are still more strings to evaluate
{
eval_string = next string to evaluate
eval_vowels = number of vowels in eval_string
if eval_vowels > highest_vowels
{
highest_string = eval_string
highest_vowels = eval_vowels
}
}
if highest_vowels == -1
{
Print "There were no strings to evaluate"
}
else
{
Print "The string with the most vowels was: " + highest_string
}
在此示例中,您不会跟踪您评估的每个字符串。您只跟踪两个字符串:当前正在评估的字符串和当前被识别为"最高"就元音而言。如果我获得一个字符串或一百万个字符串并不重要,我的代码最终会找到最高的字符串。
如果我们被要求跟踪流程的整个列表,虽然这会使事情变得复杂,但是有更高级的数据结构而不是列表。这种数据结构的一个例子是链表。理解在这些数据结构之间做出决定主要是决定我们对给定任务能够承受的性能限制(问题2)。
答案 1 :(得分:1)
#include <stdio.h>
#include <string.h>
void main()
{
int v_count=0,i,j;
int max=0,max_string;
char a[5][14]={"asdfij","nbioeolk","qwerjiu","asdfvcx","oiajkmnb"};
for (j=0;j<4;j++)
{
v_count=0;// reset the counter in each iteration
for(i=0;a[j][i]!='\0';++i)
{
//checking whether the letter is vowel or not in each string
if(a[j][i]=='a' || a[j][i]=='e' || a[j][i]=='i' || a[j][i]=='o' || a[j][i]=='u' || a[j][i]=='A' || a[j][i]=='E' || a[j][i]=='I' || a[j][i]=='O' || a[j][i]=='U')
++v_count; // increment the count if a vowel is present
}
if(v_count>max)
{
max_string=j;
max=v_count;
}
}
printf("%d,%s",max,a[max_string]);
}
备注:强>