Недавно добавленные исходники

•  Animation Loaders  801

•  DeLiKaTeS Tetris (Тетрис)  5 771

•  TDictionary Custom Sort  7 728

•  Fast Watermark Sources  7 407

•  3D Designer  10 626

•  Sik Screen Capture  7 939

•  Patch Maker  8 162

•  Айболит (remote control)  8 209

•  ListBox Drag & Drop  7 015

•  Доска для игры Реверси  100 374

•  Графические эффекты  8 285

•  Рисование по маске  7 661

•  Перетаскивание изображений  6 266

•  Canvas Drawing  6 641

•  Рисование Луны  6 563

•  Поворот изображения  5 721

•  Рисование стержней  4 657

•  Paint on Shape  3 357

•  Генератор кроссвордов  4 330

•  Головоломка Paletto  3 487

•  Теорема Монжа об окружностях  4 301

•  Пазл Numbrix  2 781

•  Заборы и коммивояжеры  3 709

•  Игра HIP  2 503

•  Игра Go (Го)  2 495

•  Симулятор лифта  2 889

•  Программа укладки плитки  2 321

•  Генератор лабиринта  3 049

•  Проверка числового ввода  2 553

•  HEX View  2 957

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Алгоритм поиска подстроки в строке



Автор: ALex2

{ **** UBPFD *********** by delphibase.endimus.com ****
>> алгоритм поиска подстроки в строке

Зависимости: SysUtils
Автор:       ALex2)
Copyright:   2)
Дата:        1 февраля 2003 г.
***************************************************** }

function BMSearch(StartPos: Integer; const S, P: string): Integer;
type
  TBMTable = array[0..255] of Integer;
var
  Pos, lp, i: Integer;
  BMT: TBMTable;
begin

  for i := 0 to 255 do
    BMT[i] := Length(P);
  for i := Length(P) downto 1 do
    if BMT[Byte(P[i])] = Length(P) then
      BMT[Byte(P[i])] := Length(P) - i;

  lp := Length(P);
  Pos := StartPos + lp - 1;
  while Pos <= Length(S) do
    if P[lp] <> S[Pos] then
      Pos := Pos + BMT[Byte(S[Pos])]
    else if lp = 1 then
    begin
      Result := Pos;
      Exit;
    end
    else
      for i := lp - 1 downto 1 do
        if P[i] <> S[Pos - lp + i] then
        begin
          Inc(Pos);
          Break;
        end
        else if i = 1 then
        begin
          Result := Pos - lp + 1;
          Exit;
        end;
  Result := 0;

end;

{
алгоритм Бойера-Мура
ф-ия возвращает первое вхождение подстроки в строку
работает быстро
}

Пример использования:

BMSearch(1, 'dsade', 'de')
// в данном примере ф-ия возвратит число 4
// 1 - это позиция с которой ищем подстроку в строке




Похожие по теме исходники

Генетический Алгоритм

Алгоритм Дейкстры

Алгоритм Беллмана-Форда




Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте