Служебная функция FindRightmost возвращает самое
последнее вхождение образца P среди n первых символов строки S. Формат вызова
функции BMSearch отличается от предыдущего. В параметре lp передается длина
строки образца, сама же строка не нужна, так как таблица смещений однозначно
описывает образец. Следует также учесть, что функция MakeBMTable динамически
выделяет память для таблицы смещений, и после окончания использования функции
BMSearch эту память необходимо освободить при помощи функции FreeMem. Следующий
фрагмент кода иллюстрирует поиск всех вхождений образца P в строке S.
MakeBMTable(BMT, P);
PatPos := BMSearch(1, Length(P), S, BMT);
while PatPos <> 0 do
begin
...
PatPos := BMSearch(PatPos + 1, Length(P), S, BMT);
end;
FreeMem(BMT);
|
Дополнительным преимуществом данного варианта
алгоритма является возможность организовать «регистронезависимый» поиск, т. е.
поиск слова вне зависимости от регистра букв. Для этого достаточно в таблице
смещений сопоставить одинаковые строки одним и тем же буквам разного регистра.
Можно даже ввести поиск по шаблону, содержащему подстановочные символы. Ниже
приводятся функции формирования таблицы смещений для шаблонов, в которых символ
«?» соответствует любому символу используемого набора.
function WCBeginsWith( const P, S : String) : Boolean;
var
i, lp : Integer;
begin
Result := False;
lp := Length(P);
if lp > Length(S) then
Exit;
for i := 1 to lp do
if (P[i]<>S[i]) and
(P[i]<>'?') and (S[i]<>'?') then Exit;
Result := True;
end;
function WCFindRightmost( const S, P : String;
l : Integer) : Integer;
var
i, j, lp : Integer; Рекомендуем скачать другие рефераты по теме: шпоры по праву, реферат по физкультуре.
Предыдущая страница реферата | 1
2
3
4
5
6
7
8
9
10 | Следующая страница реферата
|
|