试图迭代返回字符串时发生C++错误

C++ Error while attempting to iteratively return string

本文关键字:C++ 错误 字符串 迭代 返回      更新时间:2023-10-16

我正试图在迭代函数中返回字符串"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;
}

使用字符串的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;
}

这应该有效,但我没有测试,也许你必须更改一些小的

编辑:现在测试,它完美地工作

一个直接的问题是,如果word.length() - 1不大于0,则函数Iterative4无法返回值。由于函数被声明为返回字符串,这会导致未定义的行为,其中可能包括崩溃。

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;
}

我没有测试。

如果你坚持递归,这些或类似的东西应该有效。

作为家庭作业,这很好。

但是,如果你要做一些实际的工作,应该注意递归是一个非常非常昂贵的操作。