递归。我查了其他在线解决方案,他们似乎与我的非常相似。 代码应该颠倒字符串(在其位置),但它不。例如,当输入为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'。 – Groo
你交换的第一个字符之一是成为字符串末尾的'\ 0'。 – pmg
st1的唯一目的是显示旧的值。请删除st1并查看代码,我没有想到它会混淆你。 recurse_reverse的函数原型应该是:void recurse_reverse(char s [],int size);假设st1 [9]不存在,strcpy()不存在,st2 [9] =“abcdefg”,这是我想要颠倒的。谢谢。 – Mynicks