#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;
}
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消