Скачиваний:
32
Добавлен:
02.05.2014
Размер:
1.38 Кб
Скачать
Program BM;
const
Nmax = 10000;
type
MyString = array[0..Nmax-1] of char;
TBMTable = array[0..255] of integer;
var
s: MyString; {текст}
p: MyString; {слово}

function BMSearch( var str, substr : MyString ) : Integer;
var
Pos, lp, i: Integer;
BMT : TBMTable;
begin

if ( Length(str) = 0 ) then begin write('Wrong string '); BMSearch := -1; exit; end;
if ( Length(substr) = 0 ) then begin write('Wrong substring '); BMSearch := -1; exit; end;
lp := Length(substr);

for i := 0 to 255 do
BMT[i] := lp-1;
for i := lp-1 downto 0 do begin
if BMT[Byte(substr[i])] = lp-1 then
BMT[Byte(substr[i])] := lp - i - 1;
end;

Pos := lp - 1;
while Pos < Length(str) do
if substr[lp - 1] <> str[Pos] then begin
Pos := Pos + BMT[Byte(str[Pos])];
end
else for i := lp - 2 downto 0 do begin
if substr[i] <> str[Pos - lp + i + 1] then
begin
Pos := Pos + 1;
break;
end
else if i = 0 then
begin
Result := Pos - lp + 1;
Exit;
end;
end;
Result := -1;
end;

begin
Writeln('Boyer and Moore Algoritm.');
Write('String: '); Readln(s);
Write('Substring: '); Readln(p);
Write('Result: '); writeln( BMSearch(s,p) );
Writeln('Press any key to continue...');
Readln;
end.