通过递归实现C中的元音计数

通过递归实现C中的元音计数,c,recursion,C,Recursion,我的代码在运行时没有响应,我似乎无法找出问题所在,但我的最佳猜测是strcheck的else部分中的递归调用部分 #include<stdio.h> #include<stdlib.h> int alphcheck(char *ptr) { if(*ptr=='a'||*ptr=='e'||*ptr=='i'||*ptr=='o'||*ptr=='u') return 1; else return 0; }//close

我的代码在运行时没有响应,我似乎无法找出问题所在,但我的最佳猜测是
strcheck
else
部分中的递归调用部分

#include<stdio.h>
#include<stdlib.h>

int alphcheck(char *ptr)
{
    if(*ptr=='a'||*ptr=='e'||*ptr=='i'||*ptr=='o'||*ptr=='u')
        return 1;
    else 
        return 0;
}//close aplhcheck

int strcheck(char *ptr)
{
    int r;

    if(ptr=='\0')
        return 0;
    else 
    {
        r = alphcheck(ptr)+r;
        strcheck(++ptr);
        return r;
    }
}//close strcheck

int main()
{
    int res;
    char name[] = "sahirnoorali";
    res = strcheck(name);
    printf("%d",res);
    return 0;
}//close main
#包括
#包括
int alphcheck(字符*ptr)
{
如果(*ptr=='a'| |*ptr=='e'| |*ptr=='i'| |*ptr=='o'|*ptr=='u')
返回1;
其他的
返回0;
}//闭式aplhcheck
int strcheck(字符*ptr)
{
INTR;
如果(ptr=='\0')
返回0;
其他的
{
r=阿尔卑斯切克(ptr)+r;
strcheck(++ptr);
返回r;
}
}//关闭strcheck
int main()
{
国际关系;
字符名[]=“sahirnoorali”;
res=strcheck(名称);
printf(“%d”,res);
返回0;
}//闭式干管

r
未初始化。这将调用未定义的行为,您可能会得到垃圾值。另一个是

if(ptr=='\0')
您将空终止符分配给
ptr
,这是错误的。您必须使用取消引用运算符
*
,然后分配
\0

if(*ptr=='\0')

问题出在递归函数的基本情况下
strcheck
,在这一行:

     if(ptr=='\0')
应该是:

     if(*ptr=='\0')
此外,
r
变量应该是函数的另一个参数:

 int strcheck(char *ptr, int r)
 {
 if(ptr=='\0')
 return 0;

 else 
 {
 // TODO: fix the two lines below:
 r = alphcheck(ptr)+r;
 strcheck(++ptr);
 return r;
 }
它是一个累加器:从
main
调用第二个参数等于0的函数:

res = strcheck(name, 0);
以下是完整的工作代码:

 #include<stdio.h>
 #include<stdlib.h>

 int alphcheck(char *ptr)
 {
  return (*ptr=='a'||*ptr=='e'||*ptr=='i'||*ptr=='o'||*ptr=='u') ? 1 : 0;
 }

 int strcheck(char *ptr, int r)
 {
  if(*ptr=='\0') return r;
  else 
  {
   r += alphcheck(ptr);
   return strcheck(++ptr, r);
  }
 }

 int main()
 {
  int res;
  char name[] = "sahirnoorali";
  res = strcheck(name, 0);
  printf("%d\n",res);
  return 0;
 }
#包括
#包括
int alphcheck(字符*ptr)
{
return(*ptr=='a'| |*ptr=='e'| |*ptr=='i'| |*ptr=='o'|*ptr=='u')?1:0;
}
int-strcheck(字符*ptr,int-r)
{
if(*ptr=='\0')返回r;
其他的
{
r+=阿尔普切克(ptr);
返回strcheck(++ptr,r);
}
}
int main()
{
国际关系;
字符名[]=“sahirnoorali”;
res=strcheck(名称,0);
printf(“%d\n”,res);
返回0;
}

这是工作图片。。。你的代码中有错误

int strcheck(char *ptr)
{
    static int r = 0; // Declare r as static and initialize it to 0

    if(*ptr=='\0')   // Comparision problem.
        return 0;

    else 
    {
        r = alphcheck(ptr)+r;
        strcheck(++ptr);
        return r;
    }
}

好的,第一个:您使用的是未初始化的
r
,第二个:您没有使用递归调用的返回值。第三个:
if(ptr=='\0')
!它解决了运行问题,但输出为16384。现在电话问题来了,谢谢。你倒过来打电话,我喜欢这种风格。:)不,是的initialized@Sahir在指定表达式之前,您正在表达式中使用
r
。所以你是在它未初始化时使用它的。好吧,你是说我声明了它,但没有正确初始化?但这样做并不能解决问题,结果是0。