Показать сообщение отдельно
  #11  
Старый 27.03.2014, 17:23
Аватар для madMonia
madMonia madMonia вне форума
Новичок
 
Регистрация: 25.02.2014
Сообщения: 50
Версия Delphi: Delphi XE3
Репутация: 2545
По умолчанию

Pos фигня, зацените мой вариант

Код:
function SubArrayPos(const SubArr, Arr: array of byte; Offset: Integer): Integer;
var
  I, LIterCnt, L, J: Integer;
  PSubStr, PS: PByte;
begin
  L := Length(SubArr);
  { Calculate the number of possible iterations. Not valid if Offset < 1. }
  LIterCnt := Length(Arr) - Offset - L + 1;

  { Only continue if the number of iterations is positive or zero (there is space to check) }
  if (LIterCnt >= 0) and (L > 0) then
  begin
    PSubStr := @SubArr[0];
    PS := @Arr[0];
    Inc(PS, Offset - 1 );

    for I := 0 to LIterCnt do
    begin
      J := 0;
      while (J >= 0) and (J < L) do
      begin
        if PS[I + J] = PSubStr[J] then
          Inc(J)
        else
          J := -1;
      end;
      if J >= L then
        Exit(I + Offset - 1);
    end;
  end;

  Result := -1;
end;
__________________
Невозможно заточить карандаш тупым топором. Столь же тщетно пытаться сделать это десятком тупых топоров
Ответить с цитированием