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

•  DeLiKaTeS Tetris (Тетрис)  4 268

•  TDictionary Custom Sort  6 314

•  Fast Watermark Sources  6 108

•  3D Designer  9 026

•  Sik Screen Capture  6 431

•  Patch Maker  6 846

•  Айболит (remote control)  6 830

•  ListBox Drag & Drop  5 705

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

•  Графические эффекты  7 045

•  Рисование по маске  6 340

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

•  Canvas Drawing  5 586

•  Рисование Луны  5 291

•  Поворот изображения  4 844

•  Рисование стержней  3 430

•  Paint on Shape  2 687

•  Генератор кроссвордов  3 569

•  Головоломка Paletto  2 862

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

•  Пазл Numbrix  2 403

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

•  Игра HIP  2 043

•  Игра Go (Го)  1 970

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

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

•  Генератор лабиринта  2 487

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

•  HEX View  2 503

•  Физический маятник  2 120

 
скрыть

  Форум  

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-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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