递归地反转C中的数组

时间:2014-03-02 13:13:33

标签: 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”。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

由于您交换了数组的第一个和最后一个元素,因此应该递归 使用剩余的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 实际上是相同的功能,也许是一些复制粘贴错误。)

答案 1 :(得分:0)

# include <stdio.h>

/* Function to print reverse of the passed string */
void reverse(char *str)
{
   if(*str)
   {
       reverse(str+1);
       printf("%c", *str);
   }
}

/* Driver program to test above function */
int main()
{
   char a[] = "Geeks for Geeks";
   reverse(a);
   getchar();
   return 0;
}