通过递归实现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。