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