【发布时间】:2019-08-26 18:53:18
【问题描述】:
也许任何人都有一种有效的方法来删除特定字符的连续重复,最好使用内置的字符串操作,而无需显式遍历字符串字符。
例如,当我有通配符模式并且我只想删除连续的星号 (*)/aaaa/***/bbbb/ccc/aa/*****/dd --> /aaaa/*/bbbb/ccc/aa/*/dd
对于所有重复重复的字符,我可以通过以下方式使用std::unique:
str.erase( std::unique(str.begin(), str.end()), str.end());
但是只有特定的字符呢。
【问题讨论】:
-
您可以使用正则表达式替换,但在这种情况下,自制一些东西可能会更好
-
将
std::remove_if与可变 lambda 一起使用,然后是erase()。就这么简单。 -
@SamVarshavchik 是否保证元素被连续访问?
-
根据
cppreference是的。 -
@SamVarshavchik 你能链接这篇文章吗?我没找到。编辑:我猜算法接受前向迭代器,所以如果你通过其中一个,你就可以保证连续访问。令我困扰的是,我找不到明确的说法。如果您传递一个随机访问迭代器,我不明白为什么不允许它执行谓词的乱序评估。特别是因为该算法接受
ExecutionPolicy,这意味着它似乎是多线程的。
标签: c++ string algorithm unique std