【问题标题】:Compare CStringArray element?比较 CStringArray 元素?
【发布时间】:2015-04-15 18:27:07
【问题描述】:

在此代码中keepSelectedFiles 包含 5 个文本文件。而keepFiles 包含来自keepSelectedFiles 的3 个文本文件。我只想比较这两个数组,然后从keepSelectedFiiles 中删除 3 个keepFiles。然后在keepSelectedFiles 中只剩下 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]);
        }
    }
}

有人知道如何解决这个问题吗?

【问题讨论】:

  • 如果s1s2 不相等,那么你必须将它添加到junkfiles 数组中??
  • 那么我该怎么纠正这段代码呢?
  • 您现在已经发布了几个关于这个主题的变体,其中大部分都是非常基本的。我建议您学习编程书籍或在线课程。要求 Stack Overflow 用户为您编写和调试代码不会提高您的编码技能。
  • GazTheDestroyer 如果您认为这是您不解决此问题的基本原因。也许您是资深的,但在编程中没有什么是基本的,也没有什么是先进的。说到现实,两者都是一样的。
  • @AlexCerry 如果您将容器更改为 std::vector&lt;CString&gt; 而不是 CStringArray,则解决方案是 2 行循环。在这个时代,几乎没有理由使用 MFC 容器类,例如 CStringArray。

标签: c++ mfc


【解决方案1】:

你可以试试这个代码

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             

}

【讨论】:

  • 仍然代码不工作 junkFiles 包含所有文件。
  • 调试断言失败?
【解决方案2】:
CString s2 = keepFiles[i];

把上面那一行移到里面的for循环里面。

【讨论】:

  • 仍然代码不工作 junkFiles 包含所有文件。
  • 尝试在比较语句之前打印两个值,您将了解这两个值正在比较。
【解决方案3】:

你不需要 2 个 for 循环:

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]);
     }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2022-01-08
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多