C++ libc++;abi.dylib:终止时出现类型为std::out\u of\u range的未捕获异常:基本\u字符串错误
当我第一次运行代码时,没有错误。 在我键入C++ libc++;abi.dylib:终止时出现类型为std::out\u of\u range的未捕获异常:基本\u字符串错误,c++,macos,C++,Macos,当我第一次运行代码时,没有错误。 在我键入测试字符串之后,然后iaa它会给我: libc++abi.dylib:以std::out_of_range:basic_string类型的未捕获异常终止 我不知道是关于字符串函数还是我的输入 p、 该程序用于删除、插入和替换字符串中的字母 我的代码在下面 using namespace std; string str; bool flag = true; void del(char p) { int pos = str.find(p);
测试字符串
之后,然后iaa
它会给我:
libc++abi.dylib:以std::out_of_range:basic_string类型的未捕获异常终止
我不知道是关于字符串函数还是我的输入
p、 该程序用于删除、插入和替换字符串中的字母
我的代码在下面
using namespace std;
string str;
bool flag = true;
void del(char p)
{
int pos = str.find(p);
if (pos != string::npos)
{
str.erase(pos,1);
return ;
}
else
{
cout << "N" << endl;
flag = false;
}
}
void ins(string p1, string p2)
{
int pos = str.find(p1[0]);
if (pos == string::npos)
{
cout << "N" << endl;
flag = false;
return ;
}
int newpos = pos;
while (pos != string::npos)
{
pos = str.find(p1,newpos);
newpos = pos + 1;
}
str.insert(pos,p2);
return ;
}
void repl(string p1, string p2)
{
int pos = 0;
int find = 0;
find = str.find(p1[0],pos);
if (find == string::npos)
{
cout << "N" << endl;
flag = false;
return ;
}
while (true)
{
find = str.find(p1[0],pos);
if (find != string::npos)
{
str[find] = p2[0];
pos = find + 1;
}
else
{
break;
}
}
return ;
}
int main()
{
getline(cin,str);
char a;
cin >> a;
//cout << a << endl;
if (a == 'D')
{
char p1;
cin >> p1;
del(p1);
}
else if (a == 'I')
{
string p1,p2;
cin >> p1 >> p2;
ins(p1,p2);
}
else if (a == 'R')
{
string p1,p2;
cin >> p1 >> p2;
repl(p1,p2);
}
if (flag)
{
cout << str << endl;
}
return 0;
}
使用名称空间std;
字符串str;
布尔标志=真;
void del(char p)
{
int pos=str.find(p);
if(pos!=字符串::npos)
{
str.erase(位置1);
返回;
}
其他的
{
cout-p2;
ins(p1,p2);
}
如果(a='R')
{
字符串p1、p2;
cin>>p1>>p2;
repl(p1,p2);
}
国际单项体育联合会(旗)
{
没有时间学习如何使用调试器。在抛出异常时使用它捕获异常,并找出它在代码中发生的位置。然后检查所有涉及的变量,查看它们的值并确保它们都有效。我敢打赌newpos
将超出范围(在仍然不等于的情况下可能超出范围).Hi,这段代码的目的是什么?家庭作业?因为您正在重新实现现有的STL库函数。请将代码简化为问题的一部分。您当前的代码包含许多与问题无关的内容-最小的示例通常看起来类似于良好的单元测试:仅执行一个任务,并指定输入值为了再现性。是时候学习如何使用调试器了。使用它来捕获抛出的异常,并找出它在代码中发生的位置。然后检查所有涉及的变量以查看它们的值并确保它们都有效。我打赌newpos
将超出范围(在仍然不等于的情况下可能是).Hi,这段代码的目的是什么?家庭作业?因为您正在重新实现现有的STL库函数。请将代码简化为问题的一部分。您当前的代码包含许多与问题无关的内容-最小的示例通常看起来类似于良好的单元测试:仅执行一个任务,并指定输入值为了再现性。