2013-04-15 88 views
-5

因此,我想要求用户键入一个单词,然后程序将会反转它。这是我的代码,但它不能正常运行。怎么了?使用递归在c中反转字符串

#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]); 
} 
+0

究竟是什么问题?我还建议在'main'中返回'0'。 – squiguy

+0

另外你的anadr函数应该是void而不是charas它不返回任何东西。 – Ivo

+0

该程序粉碎。如果我猜对了,问题就在那里: if(i <1) anadr(i ++,l,pin); –

回答

3

为什么不

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

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

anadr(5, "abcde"); 
+0

工作!感谢Leo。 –

+0

@NorTee如果您觉得有用,请接受。 –

0

至少有一个问题是在这里:

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

这将导致无限递归,因为i++增量i只有其当前值已为通过论据。尝试用i + 1替换i++

此外,即使使用上述修复,比较也会导致额外的调用;在pin[l]的字符是终止NUL,你几乎肯定不想打印它。所以比较应该是if (i+1 < l)

+0

是的。它工作正常。但是,为什么++ i和i + 1不一样? –

+0

@NorTee'i ++'计算出'i'的值,并在它之前递增1。 '++ i'确实可以用于递归,因为它的计算结果是'i''_after_ incrementing的值。但是其中的任何一个都是错误的,因为'++ i'和'i ++'_change_是'i'的值,下面一行('printf(“%c”,pin [i])'')只有在if 'i'的值没有被改变... – Arkku

+0

另一个可行的方法是if(++ i Arkku

1

你所有的代码似乎试图做的是反向打印字符串。在退出的路上只需递送到终止符和转储字符。

void anadr(const char *p) 
{ 
    if (!*p) 
     return; 
    anadr(p+1); 
    putchar(*p); 
} 
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]); 
}