这个方法是用了hash方法,将要删除的字母先用数组下表表示,如果要删除,则标记为1.不需要删除的标记为0
这个方法在删除元素的时候比较巧妙,它对要删除的字符并不主动删除,而是将空间留在那里,让后面不需要被删除的字符去覆盖。
具体实现如下:
string& f(string& str,const string& deles)
{
bitset<256> hash;
hash.reset();
for (int i=0;i<deles.size();i++)
{
hash[deles[i]]=1;
}
int slow=0,fast=0;
while(fast<str.size())
{
if (hash[str[fast]]==1)
{
fast++;//跳过表示删除了,准备被后面留下来的字符覆盖
continue;
}
str[slow++]=str[fast++];
}
str.resize(slow);
return str;
}
int main( void )
{
string s="They are students.";
cout<<s<<endl;
cout<<f(s,"aeiou")<<endl;
return 0;
}