【发布时间】:2017-03-30 12:09:26
【问题描述】:
递归。我检查了其他在线解决方案,它们似乎与我的几乎相同。 代码应该反转字符串(在它的位置),但它没有。例如,当输入为 st2 = "abcdefg" 时,输出为空字符串。我期待st2 =“gfedcba”。我错过了什么?
#include <stdio.h>
#include <string.h>
void recurse_reverse(char s[], int sz)
{
int i=0,j = sz -1;
if(i<j)
{
swap(&s[i],&s[j]);
recurse_reverse(s+1, sz-2);
}
}
void swap( char* s1, char *s2)
{
char tmp;
tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
int main(void)
{
char st1[9] = "abcdefg", st2[9];
strcpy(st2,st1);
recurse_reverse(st2,9);
printf("s1 = %s\ns2 = %s",st1,st2);
printf("\n" );
return 0;
}
【问题讨论】:
-
您应该将
strlen(st2)传递给recurse_reverse。 -
您交换的第一个字符是
'\0',它成为字符串的结尾。 -
st1 的唯一目的是显示旧值。请删除 st1 并查看代码,我没想到它会让您感到困惑。 recurse_reverse 的函数原型应该是: void recurse_reverse(char s[], int size);假设 st1[9] 不存在,strcpy() 不存在并且 st2[9] ="abcdefg",我想将其反转。谢谢。
标签: c string recursion reverse