我有一个包含以下内容的字符串:
This is a line.
This is another line.
This is yet another line.
This is a line.
[...]
如何从字符串中删除重复的行?
答案 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());
}