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

•  DeLiKaTeS Tetris (Тетрис)  366

•  TDictionary Custom Sort  3 502

•  Fast Watermark Sources  3 247

•  3D Designer  5 009

•  Sik Screen Capture  3 499

•  Patch Maker  3 704

•  Айболит (remote control)  3 907

•  ListBox Drag & Drop  3 167

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

•  Графические эффекты  4 105

•  Рисование по маске  3 398

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

•  Canvas Drawing  2 921

•  Рисование Луны  2 726

•  Поворот изображения  2 341

•  Рисование стержней  2 228

•  Paint on Shape  1 627

•  Генератор кроссвордов  2 311

•  Головоломка Paletto  1 824

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

•  Пазл Numbrix  1 720

•  Заборы и коммивояжеры  2 094

•  Игра HIP  1 315

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

•  Симулятор лифта  1 512

•  Программа укладки плитки  1 259

•  Генератор лабиринта  1 585

•  Проверка числового ввода  1 404

•  HEX View  1 539

•  Физический маятник  1 389

 
скрыть


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

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