【问题标题】:Need help with my recursive program that reverses the input [duplicate]需要帮助我的递归程序反转输入[重复]
【发布时间】:2011-08-11 07:13:08
【问题描述】:

可能重复:
Write a recursive function that reverses the input

最近,我一直在阅读《面向所有人的 C++》一书,但在将递归函数放在一起时遇到了麻烦(想一想……)

问题是:编写一个递归函数string reverse(string str),它返回str的逆函数

这是我目前所拥有的:

string reverse(string str)
{
    string word = "";

    if (str.length() <= 1)
    {
        return str;
    }
    else
    {
        string str_copy = str;
        int n = str_copy.length() - 1;
        string last_letter = str_copy.substr(n, 1);

        str_copy = str_copy.substr(0, n);
        word += reverse(str_copy);
        return last_letter;
    }
    return word;
}

我现在的问题是:

如果我输入wolf,它会返回f

如果我将return last_letter 更改为return word,我会得到w

如果我更改为return str_copy,我会得到wol

【问题讨论】:

  • 这个问题和stackoverflow.com/questions/5760774/…有区别吗?看起来很相似。
  • 好吧,人们在大约 45 分钟后停止回答
  • 这是一种错误的看法。如果您对给出的答案不满意,请至少等待半天。然后,您可以针对相同的问题开始赏金,而不是再次发布。
  • 嘿,因为 45 分钟过去了,所以重新发布。我笑了。
  • 没有。转发,因为没人发帖

标签: c++ string recursion reverse std


【解决方案1】:

这样就可以了:

删除返回的最后一个字母;

改变`

word += reverse(str_copy);

word = last_letter+reverse(str_copy);

我会把想法留给你!

最好的。

【讨论】:

  • 是的。有用!!!!!!昨天开始做这个,搞不清楚。谢谢
【解决方案2】:

您需要返回最后一个字符 (last_letter) 和字符串其余部分的反转的组合,但在任何尝试中都不会这样做。您只能退回其中的一部分。

string reverse(string str)
{
    int len = str.length();
    if (len <= 1)
    {
        return str;
    }
    else
    {
        return str.substr(len-1, 1) + reverse( str.substr(0, len-1) );
    }
}

【讨论】:

  • 关闭一个错误 -- 应该是reverse( str.substr(0, len-1) ); 否则内部reverse 与外部reverse 具有相同的str
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 2014-10-31
  • 2020-05-03
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2010-10-21
  • 2023-03-23
相关资源
最近更新 更多