遞歸。我查了其他在線解決方案,他們似乎與我的非常相似。 代碼應該顛倒字符串(在其位置),但它不。例如,當輸入爲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