Проверка одного массива на наличие элементов другого - 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, чтобы указать, что программа успешно завершилась