使用递归在c中反转一个字符串

时间:2013-04-15 23:30:31

标签: c function recursion

所以,我想让用户输入一个单词然后,程序将反转它。这是我的代码,但它没有正常运行。怎么了?

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

char anadr(int, int, char pin[]);

main()
{
      char pin[100];
      int l;
      int i=0;
      char res;
      printf("Give word: ");
      scanf("%s", pin);
      l=strlen(pin);
      res=anadr(i,l,pin);
      system("pause");
}

char anadr(int i, int l, char pin[])
{
     if(i<l)
        anadr(i++,l,pin);
     printf("%c", pin[i]);
}

4 个答案:

答案 0 :(得分:2)

为什么不

void anadr(int l, char pin[])
{
     if(l == 0)
          return;

     printf("%c", pin[l - 1]);
     anadr(l - 1, pin);
}

anadr(5, "abcde");

答案 1 :(得分:1)

您的所有代码似乎都试图反向打印字符串。只需递归终结者并在退出途中转储字符。

void anadr(const char *p)
{
    if (!*p)
        return;
    anadr(p+1);
    putchar(*p); 
}

答案 2 :(得分:0)

这里至少有一个问题:

if(i<l)
    anadr(i++,l,pin);

这导致无休止的递归,因为{/ 1}}仅在 之后递增i++,其当前值已作为参数传递。尝试将i替换为i++

此外,即使使用上述修复,比较也会导致额外的呼叫; i + 1处的字符是终止NUL,您几乎肯定不想打印。所以比较应该是pin[l]

答案 3 :(得分:0)

你有一个错误,你不应该使用++。

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

void anadr(int, int, char pin[]);

int main()
{
      char pin[100];
      int l;
      int i=0;
      //char res;
      printf("Give word: ");
      scanf("%s", pin);
      l=strlen(pin);
      anadr(i,l,pin);
      //system("pause");
}

void anadr(int i, int l, char pin[])
{
     if(i<l-1)
        anadr(i+1,l,pin);
     printf("%c", pin[i]);
}