为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
小怪兽爱吃肉 2023-04-22 18:14:20
#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个字符串,然后经过相同的处理,然后输出处理后不同字符串的个数
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

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; 
for (it = lt.begin(); it != lt.end(); ) {
if (*it % 2 == 0)
lt.erase(it++);
else
++it;
}


查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信