Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何制作一个递归函数来显示一个输入有多少个元音_C++_Arrays_Recursion_Char - Fatal编程技术网

C++ 如何制作一个递归函数来显示一个输入有多少个元音

C++ 如何制作一个递归函数来显示一个输入有多少个元音,c++,arrays,recursion,char,C++,Arrays,Recursion,Char,我确实成功地创建了一个递归函数,但由于某种原因,*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{

我确实成功地创建了一个递归函数,但由于某种原因,*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;

  }
}
int人声(char*cd,int num){

如果(num您正在测试指针的大小,而不是数组的大小

编辑:

int人声(char-cd[],int-num){
如果(cd[num]!='\0'){
如果(cd[num]='a'| | cd[num]='e'| | cd[num]='i'| | cd[num]='o'| | cd[num]='u'){
返回1+个人声(cd,num+1);
}否则{
返回0+个人声(cd,num+1);
}
}否则{
返回0;
} }

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

幸运的是,C样式的字符串以null结尾,因此您可以寻找终止符

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;
    }
}

有改进的空间,例如正确处理大写元音,但是大部分编译器。

看起来你有一个64位的系统,你需要读什么<代码> sieOS/<代码>。sieZOF很可能应该是STROLN,但是我不知道CD是否是空的。而且因为这是标记C++,所以我建议使用ST。d::string而不是raw char*@macmake递归是一种寻找问题的解决方案。它可能是一个赋值。对我来说,它看起来相当优雅。@nicomp可能是stackoverflow上的stackoverflow…确实非常优雅…注释不用于扩展讨论;此对话已经结束。