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

时间:2015-11-27 03:54:42

标签: c++

程序旨在用户输入一个字符串,例如" TheDogIsHappy"然后显示带有大写单词之间空格的字符串。 只有两个单词,程序运行正常,但当字符串中有更多单词时: 程序运行时收到此错误: 在抛出' std :: out_of_range'的实例后终止调用 what():basic_string :: insert 没有看到字符串超出其边界的任何点,因为它只循环到字符串长度,所以不知道为什么超出范围错误。

#include <cstdlib>
#include <iostream>
#include <string>
#include <cctype>
#include <stdio.h>
#include <ctype.h>

using namespace std;

int main(int argc, char *argv[])
{
    string string1 = "";
    string string2 = "";
    int n;
    double length1;
    cout << "Enter String: " << endl;
    cin >> string1;
    n = 1;
    length1 = string1.length();
    for (int i = 0; i <= string1.length();i++) { 
        if (isupper(string1[n])) {
        string1.insert(n," ");
        n = n + 1;
        }
        n = n + 1;   
    }
    cout << "String is: ";
    n = 0;
    for (int i = 0; i <= string1.length();i++) { 
        cout << string1[n]; 
        n = n + 1;
        }
    cout << endl;
    cout << "Press the enter key to continue ...";
    string s;
    cin >> s;
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:0)

您需要使用< string1.length()因为索引从0开始,所以实际长度的值不是字符串中的有效索引。

答案 1 :(得分:0)

如果您尝试访问string处的length,则会超出范围。就像在array[5]访问大小为5的数组一样。最后一个点是array[4]