В C можно заменить функцию array_diff() при помощи других функций и алгоритмов. Здесь я приведу несколько вариантов:
1. Использование двух циклов:
void array_diff(int arr1[], int size1, int arr2[], int size2, int result[], int *result_size) { int i, j, found; *result_size = 0; // Перебираем элементы первого массива for(i = 0; i < size1; i++) { found = 0; // Сравниваем элемент первого массива с элементами второго массива for(j = 0; j < size2; j++) { if(arr1[i] == arr2[j]) { found = 1; break; } } // Если не найдено совпадений, добавляем элемент в результат if(!found) { result[*result_size] = arr1[i]; (*result_size)++; } } }
Пример использования:
int main() { int arr1[] = {1, 2, 3, 4, 5}; int arr2[] = {3, 4, 5, 6, 7}; int result[10]; int result_size; array_diff(arr1, 5, arr2, 5, result, &result_size); // Выводим результат printf("Разность массивов: "); for(int i = 0; i < result_size; i++) { printf("%d ", result[i]); } return 0; }
2. Использование функций из стандартной библиотеки:
#include <stdio.h> #include <stdlib.h> int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b); } void array_diff(int arr1[], int size1, int arr2[], int size2, int result[], int *result_size) { int i, j; *result_size = 0; // Сортируем оба массива qsort(arr1, size1, sizeof(int), compare); qsort(arr2, size2, sizeof(int), compare); i = j = 0; // Вычисляем различие между массивами while(i < size1 && j < size2) { if(arr1[i] < arr2[j]) { result[*result_size] = arr1[i]; (*result_size)++; i++; } else if(arr1[i] > arr2[j]) { j++; } else { i++; j++; } } // Добавляем оставшиеся элементы первого массива в результат while(i < size1) { result[*result_size] = arr1[i]; (*result_size)++; i++; } }
Пример использования остается тем же, что и в первом варианте.
Оба варианта решения позволяют получить массив с элементами, которые присутствуют в первом массиве и отсутствуют во втором массиве.