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

5

有没有办法从字符串中删除重复字符,就像可以从向量中删除一样

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

我需要为此编写一个基本的解决方案吗?

我想到的是:

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


3
对于字符串和向量来说,情况完全相同。 - Benjamin Lindley
这取决于您所说的“重复”字符的含义。字符串"ABACADAF"是否有重复的A?或者您只想要"AABACAD",以删除双重AA中的第一个A - Zac Howland
为什么你要选择一个O(n log(n))的解决方案,而不是使用第二种方法在O(n)的时间内完成呢?具体细节请参见这里 - adrin
谢谢,结果我错过了从str.erase(...)中的"str"部分,最终出现错误,认为这是不可能的...我的错。 - otaku
1个回答

14

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

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

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

同样的方法也适用于旧式C字符串——唯一的区别在于你不能erase它们的尾巴,你需要通过重新设置空终止字符来手动截断它们(并且没有beginend成员函数,所以你需要使用指向第一个字符和最后一个字符之后的指针)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接