Когда я запускаю код сначала, ошибки нет. После того, как я наберу Test string
, затем I a a
, это даст мне:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
Я не знаю, касается ли это строковых функций или моего ввода.
ps Эта программа предназначена для удаления, вставки и замены букв в строке
Мой код ниже
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;
}
Я использую VS Code на Mac. Я не знаю, поможет ли это. Я не знаю, что я могу набрать, но он говорит, что мой пост в основном кодовый, и мне нужно добавить больше деталей ......