Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较CStringArray元素?_C++_Mfc - Fatal编程技术网

C++ 比较CStringArray元素?

C++ 比较CStringArray元素?,c++,mfc,C++,Mfc,在此代码中,keepSelectedFiles包含5个文本文件。和keepFiles包含keepSelectedFiles中的3个文本文件。我只想比较这两个数组,然后从keepSelectedFiiles中删除3个keepFiles。然后,中只剩下2个文件保留选定的文件。此代码不起作用 for (int i = 0; i < keepSelectedFiles.GetSize(); i++) { testbox4.AddString(keepSelectedFiles[i]);

在此代码中,
keepSelectedFiles
包含5个文本文件。和
keepFiles
包含
keepSelectedFiles
中的3个文本文件。我只想比较这两个数组,然后从
keepSelectedFiiles
中删除3个
keepFiles
。然后,
中只剩下2个文件保留选定的文件
。此代码不起作用

 for (int i = 0; i < keepSelectedFiles.GetSize(); i++)

{
    testbox4.AddString(keepSelectedFiles[i]);

    CString s1 = keepSelectedFiles[i];
    CString s2 = keepFiles[i];
    for (int i = 0; i < keepFiles.GetSize(); i++)
    {
        if (s1.Compare(s2) != 0)
        {
            junkFiles.Add(keepSelectedFiles[i]);
        }
    }
}
for(int i=0;i
有人知道如何解决这个问题吗

CString s2 = keepFiles[i];
移动上面的一行,将这一行放入内部for循环。

您可以尝试此代码

for (int i = 0; i < keepSelectedFiles.GetSize(); i++)

{    
    bool flag = false;
    CString s1 = keepSelectedFiles[i];
    for (int j = 0; j < keepFiles.GetSize(); j++)// you can use different variable name
    {                                            //so there will be no confusion
        CString s2 = keepFiles[j];
        if (s1.Compare(s2) == 0)           // if s1 equal to s2
        {
            flag = true;
            break;
        }
     }

        if(!flag){
               junkFiles.Add(keepSelectedFiles[i]); // or you can pass s1 here
               keepSelectedFile.RemoveAt(i); // remove index value
               i--;
         }
         else // first empty textbox4 before this loop
            testbox4.AddString(keepSelectedFiles[i]);  // update textbox  value             

}
for(int i=0;i
循环不需要2个:

for (int i = 0,  j=0; i < keepSelectedFiles.GetSize(); i++)

{    
    CString s1 = keepSelectedFiles[i];
    CString s2 = keepFiles[j];
    if (s1.Compare(s2) != 0)
    {
                junkFiles.Add(keepSelectedFiles[i]);
     }
     else
     {
           ++j;
           testbox4.AddString(keepSelectedFiles[i]);
     }
 }
for(int i=0,j=0;i
如果
s1
s2
不相等,那么您必须将其添加到
junkfiles
数组中??因此,请更正此代码。您现在已经发布了有关此主题的多个变体,其中大多数都非常基本。我建议你学习编程书或在线课程。要求堆栈溢出用户为您编写和调试代码并不能提高您的编码技能。GazTheDestroyer如果您认为这是您不解决此问题的基本原因。也许你是高年级学生,但在编程方面,没有什么是基本的,也没有什么是进步的。当它变成现实时,两者都是一样的。@Alexerry如果您将容器改为
std::vector
,而不是CStringArray,那么解决方案是一个2行循环。在这个时代,几乎没有理由使用MFC容器类,如CStringArray。代码仍然不工作。包含所有文件的文件。尝试在compare语句之前打印这两个值,您将了解这两个值的比较情况。代码仍然不工作。包含所有文件的文件。调试断言失败?