Показать сообщение отдельно
Старый 23.05.2010, 23:37   #5
Местный
 
Аватар для Xen
 
Регистрация: 02.05.2010
Сообщений: 168
Сказал Спасибо: 9
Имеет 33 спасибок в 18 сообщенях
Xen пока неопределено
По умолчанию

PHP код:
// стандартная дельфи функция, возвращает позицию i слова 'строка' в строке s
s:='Это тестовая строка для поиска слова';
i:= pos('строка',s); // pos -  регистрозависимая фун-я!

//---------------------------------------------
// тоже самое что и Pos, но поиск идет с конца строки
function LastPos(SearchStrStrstring): Integer;
 var
    
iInteger;
   
TempStrstring;
 
begin
   Result 
:= Pos(SearchStrStr);
   if 
Result 0 then Exit;
   if (
Length(Str) > 0) and (Length(SearchStr) > 0then
   begin
     
for := Length(Str) + Length(SearchStr) - 1 downto Result do
     
begin
       TempStr 
:= Copy(StriLength(Str));
       if 
Pos(SearchStrTempStr) > 0 then
       begin
         Result 
:= i;
         break;
       
end;
     
end;
   
end;
 
end;

//---------------------------------------------
// Ищет следующее вхождение строки с определенной позиции
function NextPos(SearchStrStrstringPositionInteger): Integer;
 
begin
   Delete
(Str1Position 1);
   
Result := Pos(SearchStrupperCase(Str));
   if 
Result 0 then Exit;
   if (
Length(Str) > 0) and (Length(SearchStr) > 0then
     Result 
:= Result Position 1;
 
end;

//---------------------------------------------

function NextPosRel(SearchStrStrstringPositionInteger): Integer;
 
begin
   Delete
(Str1Position 1);
   
Result := Pos(SearchStrUpperCase(Str)) - 1;
 
end;

//---------------------------------------------

function ReplaceStr(StrSearchStrReplaceStrstring): string;
 
begin
   
while Pos(SearchStrStr) <> do
   
begin
     Insert
(ReplaceStrStrPos(SearchStrStr));
     
Delete(StrPos(SearchStrStr), Length(SearchStr));
   
end;
   
Result := Str;
 
end
А еще"встроенные" AnsiStrRScan, AnsiPos т.д.

А вот то, что тебе так нужно:
PHP код:
алгоритм Бойера-Мура
>> алгоритм поиска подстроки в строке

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

function 
BMSearch(StartPosInteger; const SPstring): Integer;
type
  TBMTable 
= array[0..255of Integer;
var
  
PoslpiInteger;
  
BMTTBMTable;
begin

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

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

end;

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

BMSearch(1'dsade''de')
// в данном примере ф-ия возвратит число 4
// 1 - это позиция с которой ищем подстроку в строке 
__________________
Free инет хранилище 2.3 Гб сейчас и до 8 гб с прямыми ссылками рефферал

Последний раз редактировалось Xen, 24.05.2010 в 13:26.
Xen вне форума   Ответить с цитированием
За это сообщение Xen нажился спасибкой от: