Не одинаковые элементы в двух массивах
Моя задача - найти не общие элементы из двух известных массивов, используя только указатели (без индексов). Я написал программу, которая находит общие элементы, и я думаю, что она очень близка, скажите мне, что нужно изменить
~ #include <stdlib.h> #include <stdio.h>
int main()
{
int arr[8] = { 1, 2 ,4, 8, 9, 10, 11, 15};
int brr[5] = { 2, 5, 6, 9, 10 };
int crr[5] = {0};
int* a, * b, * c, * aend, * bend;
a = arr;
aend = a + 8 - 1;
b = brr;
bend = b + 5 - 1;
c = crr;
for (int *a = arr; a <= aend; a++)
{
for (int *b = brr; b <= bend; b++)
{
if (*a == *b)
{
*c = *b;
c++;
}
}
}
for (int i = 0; i < 5; i++)
printf("%d ", crr[i]);
}
~
Вывод сейчас: 2, 9, 10 Вывод который нужен:1, 4, 8, 11, 15, 5, 6
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
Для простоты понимания программы и сокращения объёма кода, рекомендую проверку наличия элемента в массиве вынести в отдельную функцию. Вот так:
#include <stdlib.h>
#include <stdio.h>
#define A_LEN 8
#define B_LEN 5
#define C_LEN A_LEN+B_LEN
int present(int value, int *array, int len) {
// Проверяет, присутствует ли значение value в массиве array длинной len
int j, result=0;
for (j=0; j<len; j++) {
if ( *(array+j) == value) {
result = 1;
break;
}
}
return result;
}
int main()
{
int arr[A_LEN] = { 1, 2 ,4, 8, 9, 10, 11, 15};
int brr[B_LEN] = { 2, 5, 6, 9, 10 };
int crr[C_LEN];
int *a, *b, *c, *aend, *bend, len;
aend = arr + A_LEN - 1;
bend = brr + B_LEN - 1;
c = crr;
// Проверяем наличие элементов A в B
for (a = arr; a <= aend; a++)
{
if (present(*a, brr, B_LEN) == 0) {
*c = *a;
c++;
}
}
// Проверяем наличие элементов B в A
for (b = brr; b <= bend; b++)
{
if (present(*b, arr, A_LEN) == 0) {
*c = *b;
c++;
}
}
len = c - crr;
for (int i = 0; i < len; i++)
printf("%d ", crr[i]);
printf("\n");
}