首页 > 解决方案 > 如何制作一个递归函数来显示有多少元音有输入

问题描述

我确实设法制作了一个递归函数,但由于某种原因,*char 的大小仅达到 8,然后停止

int vocales(char *cd,int num){

  if(num<=sizeof(cd)){

      if(cd[num]=='a' || cd[num]=='e' || cd[num]=='i' || cd[num]=='o' || cd[num]=='u'){

        return 1 + vocales(cd,num+1);

      }else{

        return 0 + vocales(cd,num+1);
      }

  }else{

     return 0;

  }
}

如果我输入“stackoverflow”,它只会计算到第 8 个字符,所以它说元音的数量是 3

标签: c++arraysrecursionchar

解决方案


sizeof返回对象的大小。在这种情况下,对象是一个指针,而不是指向的项目。您需要找到一种新方法来确定何时到达字符串的末尾。

幸运的是,C 风格的字符串是空终止的,因此您可以寻找终止符。

int vocales(const char *cd) // no need for num.
                            // made cd const for a bit of extra versatility
{
    char val = *cd; // get pointed-at character just for readability
    if (val != '\0') // check for terminator
    {
        if (val == 'a' || val == 'e' || val == 'i' || val == 'o' || val == 'u')
        {
            return 1 + vocales(cd + 1); // advance pointer
        }
        else
        {
            return 0 + vocales(cd + 1);
        }
    }
    else
    {
        return 0;
    }
}

有改进的余地,例如正确处理大写元音,但编译器应该能够为您处理大部分内容。


推荐阅读