【问题标题】:Compare 2 Array structs, find unique Element比较 2 个数组结构,找到唯一的元素
【发布时间】:2014-10-13 07:48:52
【问题描述】:

我这里有问题。以下是我想要实现的目标:

  1. 我有 2 个数组结构(array1 和 array2)
  2. 我想比较一个他们有共同点的成员。哪个是 ID
  3. 数组 1 有大约 6 个 ID 元素(有重复项)
  4. 数组 2 有 4 个 ID 元素
  5. 我想查找 array1 中包含但在 array2 中找不到的 ID。
  6. 我尝试使用嵌套的 for 循环,但似乎无法到达任何地方..
  7. 计数器 = 6,计数器 2 = 4

代码:

void add(object array1[10],object2 array2[10],int counter,int counter2)
{
    for (int i=0; i<counter; i++)
   {
        for(int o=0; o<counter2; o++)
       {
            if (array1[i].id != array2[o].id)
            cout<<array1[i].id<<endl;
       }
    }
}

程序只是打印出在array1中找到的所有非重复项,并且它们每个重复至少3次, 喜欢:

100
100 
100
999
999
999
999
200
200
200
300
300
300

但是 array1 中的一个元素重复了 4 次(999)。这就是我想要的元素,而这个特定的 ID 在 array2 中根本找不到,但我不知道如何编程。有什么帮助吗?

【问题讨论】:

    标签: c++ arrays struct compare


    【解决方案1】:

    问题在于你的概念

    • 内部循环将检查 array1 的每个元素与数组 2 中的每个元素,并打印每个不匹配的值,这可以通过使用 flag 变量来避免。因此代码将如下所示:

      void add(object array1[10],object2 array2[10],int counter,int counter2) { int flag=0; for (int i=0; i<counter; i++) { flag=0; for(int o=0; o<counter2; o++) { if (array1[i].id == array2[o].id) flag=1; } if (flag==0) cout<<array1[i]<<endl; } }

    例如:

    #include <iostream>
    using namespace std;
    void add(int array1[],int array2[],int counter,int counter2)
    {
        int flag=0;
        for (int i=0; i<counter; i++)
       {
           flag=0;
            for(int o=0; o<counter2; o++)
           {
                if (array1[i]==array2[o])
                flag=1;
           }
           if (flag==0)
           cout<<array1[i]<<endl;
        }
    }
    
    int main()
    {
      int array1[6]={100,110,120,100,102,100};
      int array2[4]={100,110,120,100};
      add(array1,array2,6,4);
        return 0;
    }
    

    这将打印102

    【讨论】:

    • 哇!谢谢!这完全帮助并解决了我的问题。谢谢!
    【解决方案2】:

    您必须自己实现算法还是可以使用标准库?如果是后者,请查看set_difference。请记住,必须对这两个范围进行排序。

    【讨论】:

      【解决方案3】:

      假设 array1 = {1, 2} 和​​ array2 = {2, 3}。

      循环的第一次迭代: array1[0] = 1 & array2[0] = 2 所以你的程序打印 1

      第二次迭代: array1[0] = 1 & array2[1] = 3 所以你的程序会再次冗余打印 1。

      您要做的是在内部循环中使用布尔值。将 bool 设置为 True,如果找到匹配项,则将其标记为 False。在内循环结束后,如果它仍然为真,那么你已经找到了一个独特的元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        相关资源
        最近更新 更多