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

Posted

技术标签:

【中文标题】c++ 在抛出 \'std::out_of_range\' 实例后调用终止 what(): basic_string::insert【英文标题】:c++ terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::insertc++ 在抛出 'std::out_of_range' 实例后调用终止 what(): basic_string::insert 【发布时间】:2015-11-27 03:54:41 【问题描述】:

程序旨在让用户输入一个字符串,例如“TheDogIsHappy”,然后在大写单词之间显示一个空格。 程序只使用一个两个单词就可以正常工作,但是当字符串中有更多单词时: 程序运行时收到此错误: 在抛出 'std::out_of_range' 的实例后调用终止 什么():基本字符串::插入 看不到字符串超出其界限的任何点,因为它只循环到字符串长度,所以不知道为什么会出现超出范围的错误。

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

【问题讨论】:

您使用的是哪个编译器?该程序非常适合我输入 IamALittleTeapotRoundAndStoutThisIsMyNoseAndThisIsMySnout 【参考方案1】:

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

【讨论】:

【参考方案2】:

如果您尝试通过其length 访问string,您将超出范围。这就像在array[5] 访问一个大小为 5 的数组。最后一个位置是array[4]

【讨论】:

以上是关于c++ 在抛出 'std::out_of_range' 实例后调用终止 what(): basic_string::insert的主要内容,如果未能解决你的问题,请参考以下文章

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

问题 - 在抛出 'std::out_of_range' what(): basic_string::substr:? 的实例后调用 C++ 终止

c++ 中的错误:“在抛出 'std::length_error'what() 的实例后调用终止:basic_string::_M_replace_aux”

多个文件的内存分配错误“在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用” [C ++]

在抛出 'std::length_error' 的实例后调用终止

为啥方法在抛出异常后不需要返回值?