为了探索我对递归的理解,我试图通过使用递归函数来反转字符串。这看起来应该比现在更简单。任何人都可以告诉我我做错了什么。当我执行下面的代码时,它会产生一个空行。我在这里寻找类似的主题,但每件事都用其他语言......我很惊讶。
#include <iostream>
#include <string>
using namespace std;
/**
Recursivly reverses a string
@param return last_char, the last character currently in the string
@param go, the recursive function to return the character and continue within the function
**/
char string_reverse(string word)
{
if (word.length()-1 > 0)
{
char last_char = word[word.length()-1];
word.erase(word.length()-1);
char go = string_reverse(word);
return go;
}
else
return false;
}
int main()
{
cout << "Enter a string: ";
string input;
getline(cin, input);
string last;
last = last + string_reverse(input);
cout << last << endl;
/*char fig = string_reverse(input, fig);
cout << fig << endl;
*/
system("pause");
return 0;
}
答案 0 :(得分:2)
string_reverse()
返回char
。您不可能使用单个char
返回字符串的反向。
最重要的是,string_reverse()
中的逻辑是 long 方式,可以做任何接近反转字符串的事情。
答案 1 :(得分:2)
在string_reverse
,您应该返回last character
+ string_reverse(word)
+ first character
。
在else
中,返回一个空字符串,这样就不会遇到输入错误。
当您致电该功能时,请勿对word
执行任何其他操作,只需致电string_reverse(word)
把它们放在一起:
#include <iostream>
#include <string>
using namespace std;
/**
Recursivly reverses a string
@param return last_char, the last character currently in the string
@param go, the recursive function to return the character and continue
within the function
**/
string string_reverse(string word)
{
if (word.length()-1 > 0)
{
string first_char = word.substr(0,1);
string last_char = word.substr(word.size()-1,1);
string middle = word.substr(1, word.size()-2);
return last_char + string_reverse(middle) + first_char;
}
else
return "";
}
int main()
{
cout << "Enter a string: ";
string input;
getline(cin, input);
cout << string_reverse(input); << endl;
system("pause");
return 0;
}
然而,对于奇数字母计数,这将失败。 “c”将输出“cc”。我会把它留给你。
答案 2 :(得分:2)
您需要返回字符串,还需要将提取的char添加到返回值
string string_reverse(string word)
{
if (word.length() - 1 > 0)
{
char last_char = word[word.length()-1];
word.erase(word.length()-1);
string go = string_reverse(word);
return go.insert(0, 1, last_char);
}
else
return "";
}
答案 3 :(得分:0)
你的反身不会起作用。逆转的想法如下:
If the string len is 1, return it.
Otherwise,
Remove the first character.
Recursively reverse the remaining string.
Add the first character above to the reversed string.
Return the new string.
答案 4 :(得分:0)
如果你返回字符串,你可以得到的最短版本是:
std::string string_reverse(const std::string& str)
{
return str.size() > 1? string_reverse(str.substr(1)) + str[0] : str;
}
答案 5 :(得分:0)
以下是对上述答案之一的一个小调整,它处理偶数或奇数长度的字符串:
string reverse (string str)
{
if (str.length() == 0)
return "";
else
if (str.length() == 1)
return str.substr(0,1);
else
{
string first_char = str.substr(0,1);
string last_char = str.substr(str.size()-1,1);
string middle = str.substr(1, str.size()-2);
return last_char + reverse(middle) + first_char;
}
}
长度为0的字符串和长度为1的字符串必须分别与递归情况分开处理。