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

Removing duplicate lines stored in a string

本文关键字:存储 字符串 删除      更新时间:2023-10-16

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

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

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

字符串没有行的概念。你将不得不自己划分界线。一种可能的解决方案是从字符串构造stringstream并在其上使用getline

您可以解析std::set<string>或更好的std::unordered_set<string>中的行(如果c++11是一个选项),并且您将自动在集合中只存储每一行的一个实例。这种解决方案的缺点是无法保持行的原始顺序。如果你需要保留它,那么使用一个辅助集,并在std::vector中推送行,把它们按原始顺序放在那里。

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

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

请注意,这些行将按文字顺序返回。如果你不想这样,并且有C++11,那么使用std::unordered_set<std::string>(确认@Ivaylo Strandjev)。

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

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