Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.03.2014, 19:20
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию Функции поиска чего то в чём то

Предлагаю для обсуждения две функции по поиску массива в массиве.
Функции производят поиск в динамических или фиксированных массивах, с одной оговоркой. При поиске фиксированного или динамического подмассива в фиксированном (статическом) массиве, результат функций надо увеличить на начальный индекс фиксированного массива.

Первая функция производит поиск подмассива в массиве с лева направо.
Код:
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;

Погонял, по тестировал, ошибок не обнаружено. Интересует ваше мнение.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025