![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Предлагаю для обсуждения две функции по поиску массива в массиве.
Функции производят поиск в динамических или фиксированных массивах, с одной оговоркой. При поиске фиксированного или динамического подмассива в фиксированном (статическом) массиве, результат функций надо увеличить на начальный индекс фиксированного массива. Первая функция производит поиск подмассива в массиве с лева направо. Код:
Function lArrayPos(Const Arr, fArr: Array Of Byte; Offset: Integer = 0): Integer; Var Index, DIndex: Integer; Label f1; Begin Result := -1; if (LenGth(Arr) = 0) or (LenGth(fArr) = 0) then Exit; if Offset < 0 then Offset := 0; for Index := Low(Arr)+Offset to High(Arr) - (LenGth(fArr) - 1) do Begin for DIndex := Low(fArr) to High(fArr) do Begin if Arr[Index+(dIndex - Low(fArr))] <> fArr[dIndex] then Goto f1; End; Result := Index; Exit; f1: End; End; Вторая функция производит поиск подмассива в массиве с права налево. Код:
Function rArrayPos(Const Arr, fArr: Array Of Byte; Offset: Integer = 0): Integer; Var Index, DIndex: Integer; Label f1; Begin Result := -1; if (LenGth(Arr) = 0) or (LenGth(fArr) = 0) then Exit; if Offset < 0 then Offset := 0; for Index := High(Arr) - Offset Downto Low(Arr) + (LenGth(fArr)-1) do Begin for DIndex := High(fArr) Downto Low(fArr) do Begin if Arr[Index+(dIndex - High(fArr))] <> fArr[dIndex] then Goto f1; End; Result := (Index - LenGth(fArr)) + 1; Exit; f1: End; End; Погонял, по тестировал, ошибок не обнаружено. Интересует ваше мнение. |