Проверка одного массива на наличие элементов другого - C (СИ)
Формулировка задачи:
Необходимо проверить один массив на наличие другого в нём. То есть проверить есть ли в массиве А элементы массива B и вывести их на экран. Элементы не обязательно должны быть с одинаковыми индексами.
Вот мой код. На строке if (A[i] == B[j]) программа вылетает и выдает ошибку:
Вызвано исключение: нарушение доступа для чтения.
B было 0xE14000.
#include "stdafx.h" #include "stdio.h" #include <malloc.h> #include <windows.h> #include <locale.h> int main() { setlocale(LC_ALL, "RUS"); int B[] = { 23470 }; const int n=10; int A[n]; int i = 1, j, N; //создание и ввод массива printf("Введите символы массива А \n"); for (i = 0; i < n; i++) { scanf_s("%d", &A[i]); } //вывод цифр printf("Цифры: "); for (i = 0; i < n; i++) { for (j = 0; i < n; j++) { if (A[i] == B[j]) printf("%d", A[n]); } } system("pause"); return 0; }
Решение задачи: «Проверка одного массива на наличие элементов другого»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <stdbool.h> #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b)) void findSubArray(const int* arr1, const unsigned n1, const int* arr2, const unsigned n2) { bool flag = 0; unsigned i, j; putchar('\n'); for (i = 0; i < n1; ++i) for (j = 0; j < n2; ++j) if (arr1[i] == arr2[j]) flag = 1, printf("%i ", arr1[i]); flag ? puts("") : puts("Значений не найдено"); } int main() { setlocale(LC_ALL, ""); puts("Введите размеры обоих массивов через пробел."); unsigned n1, n2; scanf("%u%u", &n1, &n2); int arr1[n1], arr2[n2], i, m, *ptr = n1 > n2 ? arr1 : arr2; for (i = 0, m = min(n1, n2); i < m; ++i) { printf("%s%u%s\n", "Введите значение ", i, "-го элемента обоих массивов через пробел."); scanf("%i%i", arr1 + i, arr2 + i); } for (ptr += i, m = max(n1, n2); i < m; ++i, ++ptr) { printf("%s%u%s\n", "Введите значение ", i, "-го элемента оставшегося массива (без пробела)."); scanf("%i", ptr); } findSubArray(arr1, n1, arr2, n2); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем пользовательские функции для нахождения минимума и максимума
- Создаем функцию для поиска подмассива в одном массиве
- В функции main устанавливаем локальную переменную для вывода
- Запрашиваем у пользователя размеры обоих массивов
- Создаем два массива и присваиваем им значения через scanf
- Если размер первого массива больше второго, то второй массив выделяем под первый
- Проходим по обоим массивам и запрашиваем у пользователя значения элементов
- Если размер первого массива больше второго, то после ввода всех значений второго массива, запрашиваем значение для оставшегося элемента первого массива
- Вызываем функцию findSubArray для поиска подмассива
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д