我这里有问题。以下是我想要实现的目标:
代码:
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,但我不知道如何编程它。有什么帮助吗?
答案 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