我很难找到如何仅使用一个参考参数(如下面的签名)递归反转字符串。
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);
}
我设法做到这一点就好了返回一个新字符串,但出于某种原因,我很难接受这个字符串。
有什么建议吗?感谢。
答案 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;
}
}
与建议的syam一样使用 std::reverse
:
std::reverse(str.begin(), str.end());
答案 1 :(得分:1)
由于你已经有一个版本可以反转字符串但是返回它,你只需要
void reverse(string& word)
{
word = version_that_returns_reversed_string(word);
}