【问题标题】:Reverse array in C recursively递归地在C中反转数组
【发布时间】:2014-04-03 09:27:49
【问题描述】:

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

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

【问题讨论】:

  • gets() 害死我了
  • 尝试制作积木。通过交换完整的块来反转,一旦它们被交换,就递归地交换块的内部。
  • 使用调试器查看实际被替换的内容。你会感到惊讶...
  • 您没有在正确的时间停止递归。
  • 永远不要使用gets,它甚至不再是最新的标准了。

标签: c string algorithm recursion reverse


【解决方案1】:

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

【讨论】:

  • 在您的答案中解决了奇数长度字符串的错误,停止条件为n &lt;= 0
  • @zmo:关于您对现已删除的答案的评论:“653421”的反面应该是“654321”而不是“653421”。
  • 该死,我星期天有阅读障碍:-s
【解决方案2】:
# 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;
}

【讨论】:

  • 看起来 OP 想要对字符串进行适当的反转。
猜你喜欢
  • 2012-10-20
  • 2012-12-14
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
相关资源
最近更新 更多