尝试迭代返回字符串时出现C ++错误

时间:2014-10-15 00:07:22

标签: c++ string function iteration

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

3 个答案:

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

我没有测试过。

如果你坚持递归,那么这些或者像这些应该有效。

作为家庭作业,它很好。

但是如果你要做一些真正的工作,应该注意递归是一个非常昂贵的行为。