仅使用引用参数递归反转字符串

时间:2013-08-25 21:57:14

标签: c++ recursion

我很难找到如何仅使用一个参考参数(如下面的签名)递归反转字符串。

void reverse(string &s)
{
if (s.size() == 0) //this doesn't work because the size is never changing
    return;

string new_word = s.substr(1) + s.at(0);
reverse(new_word);
}

我设法做到这一点就好了返回一个新字符串,但出于某种原因,我很难接受这个字符串。

有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

这是一个递归版本:

void reverse( string& word )
{
    if ( word.size() <= 1 ) return;

    // Get the string without the first and the last char
    string temp = word.substr( 1, word.size() - 2 );
    // Reverse it
    reverse( temp );

    // Recompose the string
    word = word.substr( word.size() - 1 ) + temp + word[0];
}

但我真的建议你继续使用迭代版本:

// No need to explain, pretty clear
void reverse(string& word)  
{
    unsigned int end = word.size() - 1;
    for ( unsigned int i = 0; i < end; i++, end-- )
    {
        char c = word[end];
        word[end] = word[i];
        word[i] = c;
    }
}

Example with both


与建议的syam一样使用 std::reverse

std::reverse(str.begin(), str.end());

答案 1 :(得分:1)

由于你已经有一个版本可以反转字符串但是返回它,你只需要

void reverse(string& word)  
{
    word = version_that_returns_reversed_string(word);
}