对于我的void函数反向,我必须得到一个字符串并用递归反转它。
到目前为止,我有
void reverse(string &s)
{
string b = s;
s = s.substr(1) + s.at(0);
}
但由于函数的传递参考要求,它不起作用。如何利用引用传递进行递归?
答案 0 :(得分:2)
为了记录,这是我回答时的功能:
void reverse(string &s)
{
s = reverse(s.substr(1)) + s.at(0);
}
这里有多个问题:
首先,您要将reverse
的结果与char
相加。 reverse
会返回void
,所以这不起作用。其次,substr创建一个新字符串,并通过引用传递temp是一个麻烦。最后,在递归中,您需要退出条件。实际上,当长度为1时,您的方法会崩溃尝试获取子目录。
这是一个有效的版本:
void reverse(string &s)
{
if (s.size() == 1)
return;
string sub = s.substr(1);
reverse(sub);
s = sub + s.at(0);
}
答案 1 :(得分:0)
怎么样:
void _reverse(string& s, size_t z0, size_t z1)
{
if (z1 <= z0)
return;
auto aux = s[z0];
s[z0] = s[z1];
s[z1] = aux;
_reverse(s, z0 + 1, z1 - 1);
}
void _reverse(string& s)
{
_reverse(s, 0, s.length() - 1);
}
int main()
{
string x = "hello my friend";
_reverse(x);
cout << x << endl;
}