元数通过递归在C中计数

时间:2013-12-17 10:44:12

标签: c recursion

当我运行它时,我的代码没有响应,我似乎无法弄清楚问题,但我最好的猜测是else的{​​{1}}部分中的递归调用部分。

strcheck

3 个答案:

答案 0 :(得分:3)

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

if(ptr=='\0')

您正在为ptr指定空终结符,这是错误的。您必须使用取消引用运算符*,然后分配\0

if(*ptr=='\0')

答案 1 :(得分: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;
 }

答案 2 :(得分: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;
    }
}