修改递归字符串反转函数

时间:2013-05-16 15:25:45

标签: c++ string recursion reverse

我正在做一些递归练习。前一个是为字符串创建一个reverse()函数,它基本上删除了第一个字符,然后组合了解决方案。我设法做到了,这里是源代码(整个源代码)当前的任务是修改这个函数(书中的下面的练习),添加一个辅助函数来反转字符串的子字符串。此刻我被困在这里。我理解你在需要传递额外的参数或其他东西时使用辅助函数,而这个函数不需要,所以我真的不知道如何处理这个问题。帮助赞赏。

    #include <iostream>
    #include <string>
    using namespace std;

    void reverse(string& text)
    {
        if (text.length() == 0)
        {
            return;
        }
        if (text.length() == 1)
        {
            return;
        }
        else
        {
            string firstLetter = text.substr(0,1);
            text = text.substr(1, text.length()-1);
            reverse(text);
            text += firstLetter;
            }
    }
    int main()
    {
        string a = "tyu";
        reverse(a);
        cout << a << endl;
        return 0;
    }

一个人建议使用参数,等等,这是我的尝试:

#include <iostream>
#include <string>
using namespace std;
//is actually doing the hard work
void reverse1(string& input, int a, int b)
{
        // base case
        if( a >= b)
        {
             return;
        }
        //swap the characters
        char tmp;
        tmp = input[a];
        input[a] = input[b];
        input[b] = tmp;
        //create the boundries for the new substring
        a++;
        b--;
        //call the function again
        reverse1(input, a, b);
}

// sets the parameters and calls the helper function
void strreverse(string& input)
{

    reverse1(input, 0, input.length()-1);
}

int main()
{
    cout << "Please enter the string which you want to be reversed:";
    string a;
    cin >> a;
    strreverse(a);
    cout << a << endl;
    return 0;
}

3 个答案:

答案 0 :(得分:2)

目标可能是避免创建所有中间子串。辅助函数将采用迭代器,或者除了字符串begin reversed之外的起始和结束索引。

答案 1 :(得分:1)

尝试实现反转,以便只有std::string的一个实例(即与数组一样使用它)。然后你需要一个带有附加参数的辅助函数(至少有一个参数 - 现在要反转的索引)。

我会在这里实现反向作为一系列交换:a [0]&lt; - &gt; a [n-1],a [1]&lt; - &gt; a [n-2]等,其中n是字符串的长度。

答案 2 :(得分:0)

您可以定义一个辅助函数,该函数接受它将反转的子字符串的开始和结束索引。 该函数应该将起始索引处的元素与结束索引IFF处的元素交换起始索引和结束索引之间的差值为1.否则,它通过递减结束索引并递增起始索引来对其自身进行递归调用。如果开始和结束索引变得相同,您将需要检查条件。