Нахождение последнего вхождения подстроки в строку
Автор: Fenik
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Нахождение последнего вхождения подстроки в строку
Функция возвращает начало последнего вхождения
подстроки FindS в строку SrcS, т.е. первое с конца.
Если возвращает ноль, то подстрока не найдена.
Можно использовать в текстовых редакторах
при поиске текста вверх от курсора ввода.
Зависимости: System
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор: Федоровских Николай
Дата: 16 июня 2002 г.
***************************************************** }
function PosR2L(const FindS, SrcS: string): Integer;
{Функция возвращает начало последнего вхождения
подстроки FindS в строку SrcS, т.е. первое с конца.
Если возвращает ноль, то подстрока не найдена.
Можно использовать в текстовых редакторах
при поиске текста вверх от курсора ввода.}
function InvertS(const S: string): string;
{Инверсия строки S}
var
i, Len: Integer;
begin
Len := Length(S);
SetLength(Result, Len);
for i := 1 to Len do
Result[i] := S[Len - i + 1];
end;
var
ps: Integer;
begin
{Например: нужно найти последнее вхождение
строки 'ро' в строке 'пирожок в коробке'.
Инвертируем обе строки и получаем
'ор' и 'екборок в кожорип',
а затем ищем первое вхождение с помощью стандартной
функции Pos(Substr, S: string): string;
Если подстрока Substr есть в строке S, то
эта функция возвращает позицию первого вхождения,
а иначе возвращает ноль.}
ps := Pos(InvertS(FindS), InvertS(SrcS));
{Если подстрока найдена определяем её истинное положение
в строке, иначе возвращаем ноль}
if ps <> 0 then
Result := Length(SrcS) - Length(FindS) - ps + 2
else
Result := 0;
end;
Пример использования:
p := PosR2L('са', 'Мой сапог догнал самолёт.'); // p:=18;
|