#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 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消