【问题标题】:Erase all occurences of a word from a string [duplicate]从字符串中删除所有出现的单词[重复]
【发布时间】:2016-02-02 11:39:53
【问题描述】:

我有一个字符串,例如:

AAAbbbbbAAA

我想删除所有出现的模式AAA 以获得:

bbbbb

模式可以出现在字符串中的任何位置。

【问题讨论】:

  • @Linus 这并不是真正的重复,因为他想删除子字符串而不是替换它。所以 string::erase 在这里更合适。
  • @oo_miguel 他可以将AAA 替换为空字符串。因此我会说它是重复的。

标签: c++ std


【解决方案1】:

给定:

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

你可以简单地在你的字符串上多次运行这样的东西:

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

当然,在使用 string::erase 之前,您必须检查 string::find 是否确实发现了一个事件。

【讨论】:

  • 我听说过替换,但想知道是否有专门用于删除的。不过这样就可以了。
  • @Q3SanD 是的,在你的情况下 string::erase 更好。刚刚调整了答案
【解决方案2】:

这里是代码。它的效率不是很高,但效果很好,而且代码很小。

string h = "AAAbbbAAAB";

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

cout << h << endl;

只有在你知道模式的情况下才有效。如果它不是您想要的,也许您正在寻找一种模式匹配算法,例如 KMP。

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2017-11-01
    • 2013-03-04
    • 2012-03-14
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多