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】:您需要使用< 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 ++]