请教两个链表中的元素怎么比较,找出两个链表中不同字符串
请问两个链表中的元素如何比较,找出两个链表中不同字符串
我创建了两个链表
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);
}
}
}
这样做没有得到我想要的数据,而且执行按钮功能的时候程序还会崩溃,求大神指教,该如何修改
------最佳解决方案--------------------
CString str1,str2;
POSITION pi=list.GetHeadPosition();
POSITION pi2=list1.GetHeadPosition();
bool bFind = false;
CString str;
while(pi!=NULL)
{
bFind = false;
str1=list.GetAt(pi);
while (pi2!=NULL)
{
str2 = list1.GetAt(pi2);
if (str1 == str2)
{
bFind=true;
str=str1;
break;
}
list1.GetNext(pi2);
}
if(bFind)
{
//str为删除文件,该干嘛干嘛
}
list.GetNext(pi);
}
pi=list.GetHeadPosition();
pi2=list1.GetHeadPosition();
while(pi2!=NULL)
{
bFind=false;
str2=list1.GetAt(pi2);
while (pi!=NULL)
{
str1 = list.GetAt(pi);
if (str1 == str2)
{
str = str1;
bFind = true;
break;
}
list.GetNext(pi);
}
if(bFind)
{
//str为新增文件,该干嘛干嘛
}
list1.GetNext(pi2);
}
------其他解决方案--------------------
需要遍历2次 第一次 先遍历list 里面去和list1比较 这样可以得到删除的文件(在list不在list1)
然后先遍历list1 里面去和list比较 这样可以得到新增的文件(在list1不在list)
------其他解决方案--------------------
if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了?
我创建了两个链表
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);
}
}
}
这样做没有得到我想要的数据,而且执行按钮功能的时候程序还会崩溃,求大神指教,该如何修改
------最佳解决方案--------------------
CString str1,str2;
POSITION pi=list.GetHeadPosition();
POSITION pi2=list1.GetHeadPosition();
bool bFind = false;
CString str;
while(pi!=NULL)
{
bFind = false;
str1=list.GetAt(pi);
while (pi2!=NULL)
{
str2 = list1.GetAt(pi2);
if (str1 == str2)
{
bFind=true;
str=str1;
break;
}
list1.GetNext(pi2);
}
if(bFind)
{
//str为删除文件,该干嘛干嘛
}
list.GetNext(pi);
}
pi=list.GetHeadPosition();
pi2=list1.GetHeadPosition();
while(pi2!=NULL)
{
bFind=false;
str2=list1.GetAt(pi2);
while (pi!=NULL)
{
str1 = list.GetAt(pi);
if (str1 == str2)
{
str = str1;
bFind = true;
break;
}
list.GetNext(pi);
}
if(bFind)
{
//str为新增文件,该干嘛干嘛
}
list1.GetNext(pi2);
}
------其他解决方案--------------------
需要遍历2次 第一次 先遍历list 里面去和list1比较 这样可以得到删除的文件(在list不在list1)
然后先遍历list1 里面去和list比较 这样可以得到新增的文件(在list1不在list)
------其他解决方案--------------------
if(num > num1) 不能用个数来做条件 如果我删一个加一个 你这个逻辑不是认为没改变了?