字符串的查找删除
虽然是道水题,但还是有点东西可写的,顺道学习了一下string
中find()
的用法。
最暴力的思路就是找一个删一个,但删除的话必然涉及到大量元素的移动。
int main()
{
string s;
cin>>s;
getchar();
for(int i=0;i<s.size();i++) s[i]=tolower(s[i]);
string a,b;
while(getline(cin,a))
{
b=a;
for(int i=0;i<b.size();i++) b[i]=tolower(b[i]);
int pos=b.find(s);
while(pos != string::npos)
{
a.erase(pos,s.size());
b.erase(pos,s.size());
pos=b.find(s);
}
pos=b.find(' ');
while(pos != string::npos)
{
a.erase(pos,1);
b.erase(pos,1);
pos=b.find(' ');
}
cout<<a<<endl;
}
//system("pause");
return 0;
}
自然想到用空间换时间的做法,新开一个string来存储去除目标字符后的字符串,在查找部分也可以优化一下,让其从指定下标处开始查找。
int main()
{
string s;
cin>>s;
getchar();
for(int i=0;i<s.size();i++) s[i]=tolower(s[i]);
string a,b;
while(getline(cin,a))
{
b=a;
for(int i=0;i<b.size();i++) b[i]=tolower(b[i]);
int pos1=b.find(s,0),pos2=b.find(' ',0);
string res;
for(int i=0;i<b.size();i++)
{
if(i == pos1)
{
pos1=b.find(s,i+s.size());
i+=s.size()-1;
}
else if(i == pos2)
{
pos2=b.find(' ',i+1);
}
else res+=a[i];
}
cout<<res<<endl;
}
//system("pause");
return 0;
}