比较2个数组结构,找到唯一的元素

时间:2014-08-20 03:57:04

标签: c++ arrays struct compare

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

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

    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)。这就是我想要的元素,并且在array2中根本找不到这个特定的ID,但我不知道如何编程它。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

让我们说array1 = {1,2}和array2 = {2,3}。

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

第二次迭代: array1 [0] = 1&amp; array2 [1] = 3所以你的程序再次重复打印1。

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

答案 2 :(得分:0)

问题是你的概念

  • 内部循环将检查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