C++ 写一段代码去除文本中的重复行 (各位帮忙)

alargel 2009-04-07 12:56:09
比如说:有一个文本d:\1.txt,
内容有N行:
1111
3333
1111
3333
2222……

写一段c++的代码可以将重复行去除,内容变为:
1111
3333
2222……

各位拜托了,我是菜鸟,越详细越好。
...全文
771 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
LittleJohny 2010-04-22
  • 打赏
  • 举报
回复
mark....
f22fbi 2009-04-08
  • 打赏
  • 举报
回复
set容器实现
fairchild811 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 hairetz 的回复:]
引用 25 楼 fairchild811 的回复:
还有就是map也不允许重复的键值,如果尝试插入重复的键值会怎么样?

另外pair和map的区别是什么呢?

thanks a lot


这得看你map的second参数了,如果是普通的数据,估计就覆盖了.set的话,会继续插入到set里.当然,如果你插入一个键值存在,set里也存在的数据,那肯定不是不变吧(因为我觉得它会优化).
[/Quote]

uh, 如果插入到set里,且set已经有了正准备插入的数据,您的意思就是会覆盖掉原有的?
onlinewan 2009-04-07
  • 打赏
  • 举报
回复
如五楼那样,容器应该只是起到判断的作用。

六楼的,可能会改变顺序。
onlinewan 2009-04-07
  • 打赏
  • 举报
回复
用set或map,我觉得都应该考虑一个问题,不能改变原有文本的顺序。
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090407/13/cc6646a1-f96b-4956-8456-834bfc0c61ca.html
我在这里写过插入map<string ,set<string> >的.
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 fairchild811 的回复:]
还有就是map也不允许重复的键值,如果尝试插入重复的键值会怎么样?

另外pair和map的区别是什么呢?

thanks a lot
[/Quote]

这得看你map的second参数了,如果是普通的数据,估计就覆盖了.set的话,会继续插入到set里.当然,如果你插入一个键值存在,set里也存在的数据,那肯定不是不变吧(因为我觉得它会优化).
jakqigle 2009-04-07
  • 打赏
  • 举报
回复
支持六楼的,看下STL中关于set的资料说明。插入到set容器的内容自动会剔除重复项并且排序。
另外那个用shell的话估计lz不一定是在linux下吧,Windows的shell吗?^_^
fairchild811 2009-04-07
  • 打赏
  • 举报
回复
还有就是map也不允许重复的键值,如果尝试插入重复的键值会怎么样?

另外pair和map的区别是什么呢?

thanks a lot
fairchild811 2009-04-07
  • 打赏
  • 举报
回复
5楼的应该用map就可以了吧,不一定要用hash_map吧

顺便问一下6楼的,set中的元素只允许出现一次,如果试图insert已经存在的元素,会自动不执行,就是不会把这个数据插入到set中,谢谢
liliangbao 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
C/C++ code
#include <iostream>
#include <fstream>
#include <set>

using namespace std;

ifstream& open_file(ifstream &in, const string &file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}

int main()
{
set <string> ss;
set <string>::iterator iter;
ifstream infile;
ofstream ofile;
if ( !open_file(infile, "1.txt") )

[/Quote]

UP~
hjjdebug 2009-04-07
  • 打赏
  • 举报
回复
是啊,所以纵使在windows 下,我也装上cygwin, 要在windows下使用linux下的
强大的东西。linux 下有很多好用的。
当然,就学习c++而言,还是多学习容器类。跟楼上大牛学学set 和 map.
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hejinjing_tom_com 的回复:]
就解决该问题而言,最简单办法是script 语言。
linux 下bash 可如下书写:
cat 1.txt | sort |uniq

1.txt 就是文本内容,
该命令的意思是:将文件内容按行排序,然后消除重复行。
[/Quote]

可惜人家不是linux,shell脚本是很牛比
hjjdebug 2009-04-07
  • 打赏
  • 举报
回复
就解决该问题而言,最简单办法是script 语言。
linux 下bash 可如下书写:
cat 1.txt | sort |uniq

1.txt 就是文本内容,
该命令的意思是:将文件内容按行排序,然后消除重复行。
fairchild811 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 dizuo 的回复:]
C/C++ code一个笨办法:
使用个大的二维char数组存储,
每次读取一行,检查是否已经在数组中有相同元素。
存在就跳过,不存在就加进去。
最后输出这个二维数组。
[/Quote]

整个也太麻烦了吧
必成桂 2009-04-07
  • 打赏
  • 举报
回复
用hashmap是最有效率的。

  • 打赏
  • 举报
回复
[Quote=引用 14 楼 alargel 的回复:]
我用的VC6.0,有没有普通的方法可以实现以上功能呢?
[/Quote]

Vc6不支持C++?set都是C++的容器啊.
ryfdizuo 2009-04-07
  • 打赏
  • 举报
回复

一个笨办法:
使用个大的二维char数组存储,
每次读取一行,检查是否已经在数组中有相同元素。
存在就跳过,不存在就加进去。
最后输出这个二维数组。
csgdseed 2009-04-07
  • 打赏
  • 举报
回复
VC6.0普通的方法只能自己想算法了
alargel 2009-04-07
  • 打赏
  • 举报
回复
我用的VC6.0,有没有普通的方法可以实现以上功能呢?
加载更多回复(13)

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧