Сравните 2 массива структур, найдите уникальный элемент

0

У меня проблема. Ниже я хочу достичь:

  1. У меня есть 2 массива structs (array1 и array2)
  2. Я хочу сравнить один элемент, который у них есть. Какой идентификатор
  3. массив 1 имеет около 6 элементов идентификатора (имеет дубликаты)
  4. массив 2 имеет 4 элемента ID
  5. Я хочу найти идентификатор, который содержится в array1, но не найден в array2.
  6. Я пробовал использовать вложенный цикл, но can not, кажется, никуда не денутся.
  7. счетчик = 6, counter2 = 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

Но один элемент в массиве 1 повторяется 4 раза (999). thats элемент, который я хочу, и этот конкретный ID вообще не встречается в array2, но я не знаю, как его программировать. Любая помощь?

Теги:
arrays
struct
compare

3 ответа

0
Лучший ответ

Проблема заключается в вашей концепции

  • внутренний цикл проверяет каждый элемент массива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

  • 0
    Вау! Спасибо! это полностью помогло и решило мою проблему. Спасибо!
0

Вам нужно реализовать алгоритм самостоятельно или вы можете использовать стандартную библиотеку? Если это последнее, посмотрите на set_difference. Просто имейте в виду, что два диапазона нужно сортировать.

0

Пусть говорят, что array1 = {1, 2} и array2 = {2, 3}.

Первая итерация цикла: array1 [0] = 1 и array2 [0] = 2, поэтому ваша программа печатает 1

Вторая итерация: array1 [0] = 1 и array2 [1] = 3, поэтому ваша программа избыточно печатает 1 снова.

Вы хотите использовать логическое значение во внутреннем цикле. Установите bool в значение True, а затем отметьте False, если найдете совпадение. После завершения внутренней циклы, если она еще верна, вы нашли уникальный элемент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню