我试图在迭代函数中返回字符串"Loyce"
的反转版本。程序运行,但运行后崩溃。任何帮助将不胜感激。
string Iterative4(string word)
{
for(int x = 0; x < word.length(); x++)
{
if (word.length() - 1 > 0)
{
char last_char = word[word.length() - 1];
word.erase(word.length() - 1);
string go = Iterative4(word);
return go;
}
}
}
int main() {
cout << Iterative4("Loyce") << endl;
}
答案 0 :(得分:1)
使用string的at函数。不要一起使用递归和迭代。
string Iterative4 ( const string& word )
{
std::string l_bla;
bla.reserve(word.size());
for ( string::size_type x = word.length ( ); x > 0; x-- )
{
l_bla += word.at ( x -1 );
}
return l_bla;
}
这应该可行,但我没有测试它,也许你必须改变一些小的
编辑:现在测试,它完美运行
答案 1 :(得分:0)
一个直接的问题是,如果word.length() - 1
不大于0,则函数Iterative4
无法返回值。由于声明函数返回一个字符串,因此会导致未定义的行为,其中可能包括崩溃。
答案 2 :(得分:0)
string Iterative4(string word)
{
if (word.length() - 1 > 0)
{
char last_char = word[word.length() - 1];
word.erase(word.length() - 1);
string go = Iterative4(word);
return go;
}
else
return word;
}
int main() {
cout << Iterative4("Loyce") << endl;
}
我没有测试过。
如果你坚持递归,那么这些或者像这些应该有效。
作为家庭作业,它很好。
但是如果你要做一些真正的工作,应该注意递归是一个非常昂贵的行为。