递归。我检查了其他在线解决方案,它们似乎与我的几乎相同。
代码应该反转字符串(在它的位置),但它没有。例如,当输入为 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;
}

最佳答案

您正在交换 st1 末尾的 2 个零字节。因此,st2 以空字节开头,因此 printf() 不打印任何内容。
你只需要修正你的论点传递。代替

recurse_reverse(st2,9);


recurse_reverse(st2,strlen(st1));

您可能想要添加逻辑以确保目标数组 st2 有足够的空间。

关于c - 递归:在其位置反转字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40629678/

10-09 06:23