抛出'std :: out_of_range'的实例后调用c ++终止what():basic_string :: substr:

时间:2018-03-20 02:05:01

标签: c++

运行时出现此错误:

在抛出'std :: out_of_range'的实例后终止调用 what():basic_string :: substr:

我是全新的,任何其他提示也会受到赞赏。

#include <iostream>
#include <string>

using namespace std;

int main()
    {
    string name;
    int position = 1;
    string letter;

    cout << "Enter in your full name seperated by a space: ";
    getline (cin, name);

    cout << name.substr(0, 1);

    while (position <= name.length())
    {
        position++;
        letter = name.substr(position, 1);

        if (letter == " ")
        {
            cout << name.substr(position + 1, 1) << " ";
        }
    }

    cout << endl;

    return 0;
}

2 个答案:

答案 0 :(得分:0)

在你的循环中,position将增加到等于用户输入的字符的数字(即&#34; Abc Def&#34;最后一次循环迭代:位置= 8)。在这种情况下,name.substr(position, 1);尝试在字符串中的最后一个字符后提取字符,因此std::out_of_range例外。 您可能希望将循环条件更改为:while (position <= name.length() - 1)while (position < name.length())

答案 1 :(得分:0)

您正在尝试在最后一个索引之后到达索引,您需要将循环条件更改为:  position < name.length()

你可以使用更多用于此类问题的for循环来解决这个问题,你只需用你的while循环代替:

for (int position = 0; position < (name.length()-1); position++) {
    if (name[position] == ' ') {
        cout << name[position+1];
    }
}

使用此功能,您无需使用substr()方法string letter