尝试递归返回字符串时出现C ++错误

时间:2014-10-23 03:41:19

标签: c++ string recursion

我在尝试编译时遇到此错误:

  

“在抛出'std::out_of_range'的实例后终止调用   what()basic_string::at此应用程序已请求运行时   以不寻常的方式终止它。“

我的猜测是它与程序中的word.at()部分有关,但我似乎无法弄清楚具体原因。

string Recursive4(const string word)
{
    string D;
    int num = word.length();
    D.reserve(word.size());
    D += word.at(num);
    num--;
    if (word.at(0))
        return D;
    else
        return Recursive4(word);
}

int main()
{
    cout << Recursive4("Loyce") << endl;
}

1 个答案:

答案 0 :(得分:0)

与几乎所有容器一样,

string使用零索引,因此最大元素索引为size-1。您可以按如下方式更改代码:

string Recursive4(const string word)
{
    string D;
    int num = word.length() - 1;
    D.reserve(word.size());
    D += word.at(num);
    num--;
    if (word.at(0))
        return D;
    else
        return Recursive4(word);
}

编辑:正如用户657267指出的那样,string确实会返回对null字符的引用,如果您使用operator[]来获取索引为size的元素。