如何使用递归返回字符串?

时间:2014-09-27 01:04:45

标签: c++ recursion

我正试图解决这个递归。我很难回复字符串:

string reverse(string);

int main() {
    cout << reverse("1234") << endl;

} // end main

string reverse(string integer) {
    if (integer == "")
        return "";
    else
        return reverse(integer.substr(1, integer.length()));
} // end reverse

我知道这个功能有小问题(我希望)。你能帮帮我修理吗?谢谢,

2 个答案:

答案 0 :(得分:1)

试试这个

string reverse(string integer) {
    if (integer.length() == 0)
        return "";
    else
        return reverse(integer.substr(1, integer.length())) + integer.substr(0,1);
} // end reverse

请参阅live demo

答案 1 :(得分:0)

您的问题是,在到达空字符串之前,您将继续对较短的字符串进行递归 由于你从来没有任何带有递归调用结果的东西,你也最终得到了空字符串。

如果你希望字符串的第一个字符结束,你需要在某处使用 ,你不能把它扔掉。

你应该把第一个字符放在反转字符串其余部分结果的后面,如下所示:

string reverse(string s)
{
    if (s == "")
        return "";
    else
        return reverse(s.substr(1, s.length())) + s[0];
}

或更短

string reverse(string s)
{
    return s.empty() ? "" : reverse(s.substr(1)) + s[0];
}