使用 STL 从字符串中删除重复字符

Posted

技术标签:

【中文标题】使用 STL 从字符串中删除重复字符【英文标题】:Removing duplicate characters from string using STL 【发布时间】:2014-01-14 18:37:29 【问题描述】:

有没有办法从字符串中删除重复字符,就像它们可以从向量中删除一样,如下所示

sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );

还是我只需要编写一个基本的解决方案? 我的想法:

我可以将所有字符添加到一个集合中

【问题讨论】:

字符串和向量完全一样。 这取决于您所说的“重复”字符是什么意思。字符串"ABACADAF" 是否有重复的As?或者你只是想让"AABACAD" 删除双AA 中的第一个A 为什么你会选择O(n log(n)) 解决方案,而你可以在O(n) 中进行,正如在第二种方法中here 中所解释的那样? 谢谢,原来我错过了 str.erase(...) 中的“str”部分,最终出现错误,认为这无法完成......我的错...... 【参考方案1】:

C++ 算法和容器设计的重点在于,算法尽可能与容器无关。

因此,适用于向量的相同算法也适用——当然! – 在字符串上。

std::sort(str.begin(), str.end());
str.erase(std::unique(str.begin(), str.end()), str.end());

同样的方法甚至适用于旧式 C 字符串——只是你不能 erase 它们的尾部,你需要通过重新设置空终止字符来手动截断它们(并且没有 beginend 成员函数,因此您可以使用指向第一个和倒数第二个字符的指针。

【讨论】:

以上是关于使用 STL 从字符串中删除重复字符的主要内容,如果未能解决你的问题,请参考以下文章

使用字符分隔符在 C++ 中解析字符串,但在每个解析的子字符串中保留可重复的字符作为分隔符(C++ STL)

stl中字符串中的擦除关键字的工作?

如何从字符串中删除('')[重复]

使用 JavaScript 从字符串中删除某些字符 [重复]

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

从字符串中删除点符号[重复]