删除存储在字符串中的重复行

时间:2013-12-17 09:57:05

标签: c++ string

我有一个包含以下内容的字符串:

This is a line.
This is another line.
This is yet another line.
This is a line.
[...]

如何从字符串中删除重复的行?

3 个答案:

答案 0 :(得分:5)

一个字符串没有一行的概念。你必须自己拆分线。一种可能的解决方案是从字符串构造stringstream并在其上使用getline

您可以在std::set<string>或更好std::unordered_set<string>中解析这些行(如果c++11是一个选项),您将自动只在该集中存储每行的单个实例。该解决方案的缺点是它不会保持线的原始顺序。如果你需要保留它,那么使用一个帮助器集并按下std::vector中的行,然后按原始顺序放置它们。

答案 1 :(得分:3)

实例化std::set<std::string>。向其添加每一行(set将隐式传递重复项。)

使用std::set<std::string>::const_iterator拉回值。

请注意,这些线条将以字典顺序返回。如果您不想这样,并且使用C ++ 11,则使用std::unordered_set<std::string>代替(确认@Ivaylo Strandjev)。

答案 2 :(得分:1)

您可以将字符串转换为字符串向量,并使用这段代码删除重复的字符串。

void removeDuplicate( std::vector<std::string>& vec )
{
    std::sort(vec.begin(), vec.end());
    vec.erase( std::unique( vec.begin(), vec.end() ), vec.end());
}