我是想把一个字符串@前面的 . 删除,再把@前面的+和@之间的部分删除

#include<iostream>
#include<string>
using std::string;
int main()
{
using namespace std;

int n;
cin>>n;
cin.get();
int k=1;
string s[n];
int x;
int y;
int z;
for(int i=0;i<n;i++)
{
getline(cin,s[i]);}
for(int i=0;i<n;i++)
{
x=s[i].find("@");
y=s[i].find(".");
while((y!=string::npos)&&(y<x)) 
{
s[i].erase(y,1);
y=s[i].find(".",y+1);

}
z=s[i].find("+");
if((z<x)&&(z!=string::npos))
{
s[i].erase(z,x-z);}
if(i>0)
{
for(int j=0;j<i;j++)
{
if(s[i]==s[j])
{k-=1;
break;}
}
}
k+=1;

}
cout<<k<<endl;
return 0;

这个为什么erase越界了?
我就是想把一个字符串@前面的 . 删除,再把@前面的+和@之间的部分删除
一共输入n个字符串,然后经过相同的处理,然后输出处理后不同字符串的个数

小怪兽爱吃肉
浏览 80回答 1
1回答

GCT1015

erase()函数的功能是用来删除容器中的元素。函数原型:iterator erase(iterator where);iterator erase(iterator first,iterator last);basic_string& erase(size_type p0=0,size_type n=np);删除某个容器里的某个元素:c.erase(T);链表容器以list为例,执行container.erase(it)。list<int>::iterator it;&nbsp;for (it = lt.begin(); it != lt.end(); ) {if (*it % 2 == 0)lt.erase(it++);else++it;}
打开App,查看更多内容
随时随地看视频慕课网APP