2015-11-02 35 views
-6

我有一个字符串,如:擦除一个字符串的单词出现的所有

AAAbbbbbAAA 

我想删除模式AAA的所有occurances获得:

bbbbb 

的模式可以发生在字符串的任何地方。

+1

@Linus这是不是真的重复,因为他想删除子字符串,而不是取代它。所以string :: erase在这里更加适合。 –

+0

@oo_miguel他可以用空字符串替换AAA。所以我会说这是重复的。 – Linus

回答

2

考虑:

string yourstring("AAAbbbAAA"); 
string removestring("AAA"); 

你可以简单地运行像你的字符串此多次:

yourstring.erase(yourstring.find(removestring), removestring.length()); 

当然,你将不得不检查string::find使用string::erase其实之前找到一个occurence。

+0

我听说过替换,但想知道是否有具体用于删除。这将做到这一点。 –

+0

@ Q3SanD是的,在你的情况下string :: erase更好。只是修改了答案 –

0

这是代码。这不是非常有效,但效果很好,而且是一个很小的代码。

string h = "AAAbbbAAAB"; 

int pos = h.find("AAA"); 
while(pos!=-1) 
{ 
    h.replace(pos, 3, ""); 
    pos = h.find("AAA"); 
} 

cout << h << endl; 

它只适用于如果你知道模式。如果它不是你想要的,也许你正在寻找一种模式匹配算法,比如KMP。

相关问题