Страницы

Поиск по вопросам

четверг, 14 марта 2019 г.

Поиск вхождения целочисленного массива, Си

Добрый день. Пусть имеется два массива целых чисел:
int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int arr2[] = {3, 4, 5};
Существует ли функция (наподобие strstr для строк), которая вернет указатель, если arr2 входит в arr1, и вернет NULL, если вхождение не найдено.


Ответ

Набросал вариант в лоб:
#include #include
int find_subarray(const int *a, size_t an, const int *b, size_t bn) { for (int i = 0; i <= an - bn; i++) { if (memcmp(a + i, b, bn * sizeof(int)) == 0) return i; }
return -1; }
int main() { int a[] = {2, 5, 1}; int b[] = {2, 5, 1}; int pos = find_subarray(a, sizeof(a)/sizeof(int), b, sizeof(b)/sizeof(int));
if (pos >= 0) printf("B = A[%i, %lu]
", pos, pos + sizeof(b)/sizeof(int)); else printf("B is not subarray of A
");
return 0; }

Комментариев нет:

Отправить комментарий