У меня проблема. Ниже я хочу достичь:
код:
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
Но один элемент в массиве 1 повторяется 4 раза (999). thats элемент, который я хочу, и этот конкретный ID вообще не встречается в array2, но я не знаю, как его программировать. Любая помощь?
Проблема заключается в вашей концепции
внутренний цикл проверяет каждый элемент массива1 на каждый из массива 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
Вам нужно реализовать алгоритм самостоятельно или вы можете использовать стандартную библиотеку? Если это последнее, посмотрите на set_difference. Просто имейте в виду, что два диапазона нужно сортировать.
Пусть говорят, что array1 = {1, 2} и array2 = {2, 3}.
Первая итерация цикла: array1 [0] = 1 и array2 [0] = 2, поэтому ваша программа печатает 1
Вторая итерация: array1 [0] = 1 и array2 [1] = 3, поэтому ваша программа избыточно печатает 1 снова.
Вы хотите использовать логическое значение во внутреннем цикле. Установите bool в значение True, а затем отметьте False, если найдете совпадение. После завершения внутренней циклы, если она еще верна, вы нашли уникальный элемент.