Обработка массива по условию

) Есть два массива A и B. Пользователь вводит в них значения, нужно создать массив C в котором будут числа, присутствующие только в массиве A или только в массиве B Написал вот такую программу и выдает не верный ответ( Не могу понять что не так и как исправить

#include <iostream>
 
using namespace std;
 
bool finding(int arr[],int size,int num){
    for(int i = 0;i<size;++i)if(arr[i] == num)return 1;
    return 0;
}
 
int main()
{
    int size,size1;
    cout << "Введите сначала длину массива A потом длину массива B\n";
    cin >> size >> size1;
    cout << "Вводите сначала значения массива A потом значения массива B\n";
    int arr[size],arr1[size1];
    for(int i = 0;i<size;++i)cin >> arr[i];
    for(int i = 0;i<size1;++i)cin >> arr1[i];
    for(int i = 0;i<max(size,size1);++i){
            if(size > size1){
                if(!finding(arr1,size1,arr[i]))cout << arr[i] << ' ';
            } else {
                if(!finding(arr,size,arr1[i]))cout << arr1[i] << ' ';
            }
    }
 
    cout << endl;
    return 0;
}

Ответы (1 шт):

Автор решения: AlexGlebe

Когда спрашиваете размеры данных и при компиляции неизвестно количество. Тогда нужно выделять память по-другому. С помощью new[], потом освобождать с delete[];

int * const arr = new int [size] ;
int * const arr1 = new int [size1] ;

Про алгоритм : нужно два отдельных цикла. Первый цикл смотрит индивидульные элементы в первом массиве. А второй цикл во втором. Вы не создаёте массив, а просто выводите в консоль. Нужно выделить память для нового массива и потом не забыть удалить.

// выделяем память по максимуму в виде суммы
int * const arr3 = new int [ size + size1 ] ;
// количество полезных элементов пока ноль
int size3 = 0 ;
for(int i = 0;i<size;++i)
  if(!finding(arr1,size1,arr[i])) {
     arr3[size3] = arr[i] ;
     ++ size3 ; }
for(int i = 0;i<size1;++i)
  if(!finding(arr,size,arr1[i])) {
     arr3[size3] = arr1[i] ;
     ++ size3 ; }
// затем можно выводить, если хочется
cout << "C = "
for(int i = 0;i<size3;++i)
  cout << arr3[i] << ' ';
cout << endl ;
// удалить занятую память не забываем
delete [ ] arr3 ;
delete [ ] arr1 ;
delete [ ] arr ;
→ Ссылка