c - 递归地反转C中的数组

标签 c string algorithm recursion reverse

这是我的代码的一部分,我在其中尝试递归地反转字符串:

    char reverse[10];
    gets(reverse);
    reverseString(reverse, (strlen(reverse) - 1));
    void reverseString(char ar[], int n)
    {
        if (n == 0)
        {
            return;
        }
        else
        {
            int temp = ar[n];
            ar[n] = *(ar);
            *(ar) = temp;
            reverseString((ar + 1), (n - 1));
        }
    }

当我输入字符串“hello”时,它会将字符串更改为“ohell”。我需要它将字符串完全反转为“olleh”。有人可以帮忙吗?

最佳答案

既然你交换了数组的第一个和最后一个元素,你应该递归 使用剩余的 n-2 元素(而不是 n-1)调用函数,

void reverseString(char ar[], int n)
{
    if (n <= 0)
    {
        return;
    }
    else
    {
        int temp = ar[n];
        ar[n] = *(ar);
        *(ar) = temp;
        reverseString((ar + 1), (n - 2));
    }
}

(我假设您的代码中的 reverseStringreverseAr 是 实际上是相同的功能,也许是一些复制粘贴错误。)

关于c - 递归地反转C中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128012/

相关文章:

java - 计算字符串和字符串 vector 中常见字符的数量

java - 在Java中读取字符串中的字符时遇到问题

c - 线程同步问题: possible race, 滥用volatile,缓存一致性?

c - 如何在程序中自动插入 pragma

c++ - linux中uint32_t从4字节变为6字节

java - 安卓字符串问题

c - 当我在 splay 树中遍历时,现在哪个是根?

algorithm - 最长的简单路径

java - 朴素矩阵乘法改进

c - 线程 ID 和进程 ID 之间的关系