删除存储在字符串中的重复行
Removing duplicate lines stored in a string
我有一个包含以下内容的字符串:
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());
}
相关文章:
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 在向量 C++14(无限制联合)的结构内的联合中创建和存储字符串
- 如何存储字符串列表
- 在向量中存储字符串存在 SEG 错误
- 指针存储字符串?
- 逐个字母存储字符串并打印
- 将字符数组转换为字符串并存储字符串?
- 当分配动态内存以存储字符串副本时,程序会中断
- 在C/C++中存储字符串、数组和指针,哪种方法更有效
- 我们如何以 7 位格式存储字符串
- C 存储字符串输入为CString
- TVItem lparam存储字符串
- C++以相反的顺序存储字符串
- 如果存储字符串的char数组小于字符串,则C++实际存储字符串
- 为什么我的 SetBookTitle 不存储字符串
- 如何在 C 中有效地存储字符串的映射
- 如何使用好友运算符存储字符串
- 如何在 C++ 中存储字符串和整数串联的变量
- 如何在 c++ 中存储字符串数组
- 存储字符串