c - 使用递归在 C 中反转字符串

标签 c recursion

我编写了一个程序来使用递归反转字符串。但是我得到的输出总是一个空字符串。

我想知道我的逻辑哪里出了问题?

#include<stdio.h>

void reverse(char a[], int start, int end)
{
    char t;
    if(start>=end)
        return;
    else
    {
        t = a[start]; a[start] = a[end]; a[end] = t;
        reverse(a,++start,--end);   
    }
}

int main(void)
{
    char a[] = "hello";
    int n = sizeof(a)/sizeof(a[0]); 
    printf("Given string is : %s ",a);
    reverse(a,0,n-1);
    printf("Reversed string is : %s ",a);
    return 0;
}

输出:

enter image description here

打印我得到的单个字符,

enter image description here

最佳答案

您的字符串实际上是 6 个字节长 - 'h', 'e', 'l', 'l', 'o', '\0'。最后一个字符是一个空字节,它是一个字符串终止符。它向 printfstrlen 等函数发出字符串结束的信号。当您调用 reverse 时,它会反转整个字符串,因此现在终止符是第一个字节,printf 将其解释为空字符串。

有两种方法可以解决这个问题。将传递给 reverse 的索引变小(调用 reverse(a, 0, n-2)),或者改用 strlen sizeof (int n = strlen(a)).

关于c - 使用递归在 C 中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974520/

相关文章:

c - 在 C 中打印二进制字符

c - io_submit writes() 是否保证按顺序执行?

scala - 递归地向数据框添加行

python - 图中的回溯

algorithm - 如何在 Clojure 算法实现中处理多个变量?

在 if 语句之前运行的 c 系统调用

c - 从共享对象文件 (.so) 获取函数返回类型和参数

c - "accept"总是返回1,但没有描述符被关闭

java - 加到 n 的 1 + 2 的所有组合

java - 编写一个打印二叉树和每个节点级别数的方法