请问两个链表中的元素如何比较,找出两个链表中不同字符串

90Runner 2012-12-07 11:04:41
我创建了两个链表
CList<CString,CString> List;
CList<CString,CString> List1;
两个链表均存储我遍历指定文件夹后得到的文件,List存储第一次遍历得到的文件,此时我在指定文件夹下增加或删除文件时,就在执行一次遍历指定目录得到的新数据存到List1中,请问我如何将这两个链表进行对比找出其中不同的部分(就是新加入或删除的文件)。
我写了如下的方法: 其中的num与num1是这两个链表的结点个数
POSITION pos = List.GetHeadPosition();
POSITION pos1 = List1.GetHeadPosition();
if(num > num1)
{
CString str;
str = "有文件被删除,删除的文件为:";
SetDlgItemText(IDC_EDIT3,str);
CString str2="";
CString str3="";
for(int i=0;i<num1;i++)
{
str2 = List1.GetNext(pos1);
for(int j=0;j<num;j++)
{
str3 = List.GetNext(pos);
// SetDlgItemText(IDC_EDIT10,str3);
if(strcmp(str2,str3) != 0)
{
SetDlgItemText(IDC_EDIT10,str3);
}
}

}
这样做没有得到我想要的数据,而且执行按钮功能的时候程序还会崩溃,求大神指教,该如何修改
...全文
750 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
ygz333 2012-12-08
  • 打赏
  • 举报
回复
下载下来参考
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 7 楼 yaozhiyong110 的回复:
引用 5 楼 Paddy90 的回复:引用 4 楼 yaozhiyong110 的回复: 引用 3 楼 Paddy90 的回复:引用 2 楼 yaozhiyong110 的回复: if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了? 这个我知道,我只是把程序的一个if语句贴了上来,重要的是我现在得不到我想要的数……
可能是我描述的有问题??? 我想知道的是如何正确比较找出新增加或删除的数据,就是如果有删除操作就将List中的数据与List1中的数据做对比,如果比较的数据在List1中没有,那么这个就是被删除的文件,我想知道用代码如何实现,我写的代码有问题,我现在想知道如何才能正确的找出我想要的文件。
youngwolf 2012-12-07
  • 打赏
  • 举报
回复
这种要求还是用map,否则效率太低。
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
引用 5 楼 Paddy90 的回复:
引用 4 楼 yaozhiyong110 的回复: 引用 3 楼 Paddy90 的回复:引用 2 楼 yaozhiyong110 的回复: if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了? 这个我知道,我只是把程序的一个if语句贴了上来,重要的是我现在得不到我想要的数据,而且执行按钮功能的时候程序会崩溃,请问该如何正确的得到我想要……
CString 直接用==号比较就行了
hztj2005 2012-12-07
  • 打赏
  • 举报
回复
最好用stl的List,你的问题是差集/对称差集: http://blog.csdn.net/jianzhanger/article/details/6677631 http://blog.sina.com.cn/s/blog_51e1db6b0100iz28.html
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 4 楼 yaozhiyong110 的回复:
引用 3 楼 Paddy90 的回复:引用 2 楼 yaozhiyong110 的回复: if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了? 这个我知道,我只是把程序的一个if语句贴了上来,重要的是我现在得不到我想要的数据,而且执行按钮功能的时候程序会崩溃,请问该如何正确的得到我想要的数据啊? 遍历你会么……
恩 遍历我都做完了,也存进去了,并且也判断了链表是否为空。我也是遍历了两次,分别存在Clist与Clist1中,现在我想知道如何做比较,像我那种比较方法对不对
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
引用 3 楼 Paddy90 的回复:
引用 2 楼 yaozhiyong110 的回复: if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了? 这个我知道,我只是把程序的一个if语句贴了上来,重要的是我现在得不到我想要的数据,而且执行按钮功能的时候程序会崩溃,请问该如何正确的得到我想要的数据啊?
遍历你会么? 按我说的逻辑遍历2次就行了...
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 2 楼 yaozhiyong110 的回复:
if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了?
这个我知道,我只是把程序的一个if语句贴了上来,重要的是我现在得不到我想要的数据,而且执行按钮功能的时候程序会崩溃,请问该如何正确的得到我想要的数据啊?
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了?
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
需要遍历2次 第一次 先遍历list 里面去和list1比较 这样可以得到删除的文件(在list不在list1) 然后先遍历list1 里面去和list比较 这样可以得到新增的文件(在list1不在list)
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
引用 21 楼 tiger9991 的回复:
楼主这个需求看下来,还不如用钩子hook住CreateFile,DeleteFile这些API 然后用Map映射左值文件名,右值文件名对应结构体。 这样你就做到同步了。上面的遍历对比全部再见。
要是他会这些 还需要发这个贴么...
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 27 楼 gz_qmc 的回复:
引用 24 楼 Paddy90 的回复:引用 21 楼 tiger9991 的回复:楼主这个需求看下来,还不如用钩子hook住CreateFile,DeleteFile这些API 然后用Map映射左值文件名,右值文件名对应结构体。 这样你就做到同步了。上面的遍历对比全部再见。 由于还是新手,还不知道钩子是什么,感谢你的指点,以后会注意的。 钩子:四川方……
受教了.......
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 26 楼 yaozhiyong110 的回复:
引用 25 楼 Paddy90 的回复:引用 23 楼 yaozhiyong110 的回复: 给你写那么多遍代码 你又知道你自己的需求 还看不懂??? 额,先谢谢你的指点,我明白你的意思 但是判断 “==” 真取不出我想要的值(要不我把代码发给你你帮我看看?),结点个数小于两个输出的结果不正确的问题我已经解决了,但是同时删除或添加多个还是有点问题啊。 周末……
恩 我在研究研究 要不你给我个QQ号吧
gz_qmc 2012-12-07
  • 打赏
  • 举报
回复
引用 24 楼 Paddy90 的回复:
引用 21 楼 tiger9991 的回复:楼主这个需求看下来,还不如用钩子hook住CreateFile,DeleteFile这些API 然后用Map映射左值文件名,右值文件名对应结构体。 这样你就做到同步了。上面的遍历对比全部再见。 由于还是新手,还不知道钩子是什么,感谢你的指点,以后会注意的。
钩子:四川方言,指女人的性器官 锤子:四川方言,指男人的性器官
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
引用 25 楼 Paddy90 的回复:
引用 23 楼 yaozhiyong110 的回复: 给你写那么多遍代码 你又知道你自己的需求 还看不懂??? 额,先谢谢你的指点,我明白你的意思 但是判断 “==” 真取不出我想要的值(要不我把代码发给你你帮我看看?),结点个数小于两个输出的结果不正确的问题我已经解决了,但是同时删除或添加多个还是有点问题啊。
周末了 休息... 你用我最后给的代码应该是没问题的
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 23 楼 yaozhiyong110 的回复:
给你写那么多遍代码 你又知道你自己的需求 还看不懂???
额,先谢谢你的指点,我明白你的意思 但是判断 “==” 真取不出我想要的值(要不我把代码发给你你帮我看看?),结点个数小于两个输出的结果不正确的问题我已经解决了,但是同时删除或添加多个还是有点问题啊。
90Runner 2012-12-07
  • 打赏
  • 举报
回复
引用 21 楼 tiger9991 的回复:
楼主这个需求看下来,还不如用钩子hook住CreateFile,DeleteFile这些API 然后用Map映射左值文件名,右值文件名对应结构体。 这样你就做到同步了。上面的遍历对比全部再见。
由于还是新手,还不知道钩子是什么,感谢你的指点,以后会注意的。
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
给你写那么多遍代码 你又知道你自己的需求 还看不懂???
yaozhiyong110 2012-12-07
  • 打赏
  • 举报
回复
引用 18 楼 Paddy90 的回复:
引用 17 楼 yaozhiyong110 的回复: CString str1,str2; POSITION pi=list.GetHeadPosition(); POSITION pi2=list1.GetHeadPosition(); bool bFind = false; CString str; while(pi!=NULL) { bFind = false; ……
就是判断==啊 等于了bFind就标记为true遍历完退出来就知道 根据bFind就知道外面的list这个元素是不 是在里面的list里
傻X 2012-12-07
  • 打赏
  • 举报
回复
楼主这个需求看下来,还不如用钩子hook住CreateFile,DeleteFile这些API 然后用Map映射左值文件名,右值文件名对应结构体。 这样你就做到同步了。上面的遍历对比全部再见。
加载更多回复(11)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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