使用递归函数的反转字符串

时间:2013-05-17 07:45:27

标签: c function recursion reverse

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

void rec(char pin[]);

main()
{
      char pin[100];
      printf("Give word: ");
      scanf("%s", pin);
      rec(pin);
      system("pause");
}

void rec(char pin[])
{
     int i=0;
     if (pin[i]=='\0')
        return;

     else
     {    
        rec(pin[i+1]);
        printf("%c", pin[i]);

     }

}

似乎没有用,但我不知道为什么。 (我不允许使用for循环,函数strlen和类似的东西)。

4 个答案:

答案 0 :(得分:3)

在rec函数else部分你传递的元素应该是element的地址。所以在else部分尝试这个

else
     {    
        rec(&pin[i+1]);
        printf("%c", pin[i]);

     }

答案 1 :(得分:1)

好吧,既然你的问题是“为什么它不起作用”,那么不妨回答一下。

我将假设re()声明只是rec()的拼写错误 - 当然你必须纠正错误。

在该函数的第一行中,您声明一个变量int i = 0;。但是,永远不会再分配该变量。扫描该功能以查找i上的任何作业 - 您将找不到任何作业。因此,i变量是常数0.考虑到这一点,让我们用i替换0并再次编写代码:

if (pin[0]=='\0')
    return;
else
{    
   rec(pin[1]);
   printf("%c", pin[0]);
}

违规行显然是rec(pin[1])。该函数需要一个char *参数,即一个字符串(注意char *char []在函数参数声明中是相同的)。但是,pin[1]只是pin的第二个字符。你正在做的是将该字符隐式转换为指针并将其传递给函数 - 这是不正确的。

要传递给rec()的是指向第二个字符的指针,因为这会使它成为指向从pin的第二个字符开始的字符串的指针。因此,正确的调用将是rec(pin + 1),而不是rec(pin[1])。由于pin指向字符串的第一个字符,pin + 1指向第二个字符。

答案 2 :(得分:1)

这不正确。首先,您使用的是自动变量。所以,'i'将始终初始化为0。

使用static int i,仔细查看。你把char扔给了char *。所以,你不能扔rec(pin [i + 1]);将此更改为rec(pin);在printf之前(“%c”,pin [i]);在递归调用rec之前递减'i',递增'i'。最后但并非最不重要的是,你打电话给'rec'。但是函数名是're',其中是c ???

答案 3 :(得分:0)

void rec(char pin[]){
    if (*pin=='\0')
        return;
    else {
        rec(pin + 1);
        printf("%c", *pin);
    }
}