1

我有一个作业,其中给了我一个代码,该代码应该计算字符串中元音的数量。缺少代码片段,我必须填写它。但是我一生都无法弄清楚如何去做。我可以很容易地用 for 循环计算元音,但是这个作业非常严格,我不知道如何让这个程序以这种方式工作。这是代码:

#include <stdio.h>
int vowels(char *s)
{
   char *z ="aeiouy";
   int count = /-/;
   while (/-/)
     count+= /-/
   if (/-/)
      return 0;
   return count;
}
int main()
{
char buf (/-/);
while (scanf("%s", buf)>0)
   printf("%d\n", vowels(buf));
return 0;
}

/-/是我应该填写以使程序正常工作的区域。元音函数中的 while 循环给我带来了最大的麻烦,我完全不知道该放什么。这是我到目前为止所得到的。

#include <stdio.h>
int vowels(char *s)
{
   char *z ="aeiouy";
   int count = 0;
   while (/-/)
     count+= 1
   if (count==0)
      return 0;
   return count;
}
int main()
{
char buf [1000];
while (scanf("%s", buf)>0)
   printf("%d\n", vowels(buf));
return 0;
}

我知道“递归”意味着我应该在它的主体内调用函数,但我不明白如何在这个程序中执行它。请帮忙!

编辑:“编写一个递归函数 vowels(),它返回字符串中的多个元音。” 这就是我得到的任务。我提交的第一个代码是我从教授那里得到的,我不能以任何方式更改它,我只能填写空白(/-/)。我提交的第二个代码是我认为应该在空白处的,但它可能不正确。

EDIT2:我忘了提到的另一件事,这些行的顺序可能是错误的,我应该把它和正确的顺序放在一起并填写空白。我认为我提交的订单是正确的,但我可能错了。

4

1 回答 1

1

您提供的功能没有递归。此外,它被错误地声明。至少参数应该有限定符const,因为传递的字符串在函数内没有改变。

考虑到您对函数的要求(while 循环和数组),可以按照以下方式定义函数,如演示程序中所示

#include <stdio.h>

size_t vowels( const char *s )
{
    if ( !*s ) return 0;

    const char *z = "aeiouy";

    size_t count = 0;

    while ( z[count] != '\0' && z[count] != *s ) ++count;

    return ( z[count] != '\0' ) + vowels( s + 1 );
}

int main(void) 
{
    const char *s = "Hello TommySVK";

    printf( "There are %zu vowels in the string \"%s\"\n",
            vowels( s ), s );

    return 0;
}

程序输出为

There are 4 vowels in the string "Hello TommySVK"

如果需要,您可以size_t将函数中使用的类型替换为类型int,将表达式替换++countcount += 1.

于 2019-11-14T14:37:56.580 回答