Нахождение последнего вхождения подстроки в строку
Функция возвращает начало последнего вхождения подстроки FindS в строку SrcS, т.е. первое с конца. Если возвращает ноль, то подстрока не найдена. Можно использовать в текстовых редакторах при поиске текста вверх от курсора ввода.
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; |
Вариант 2:
function LastPos(SubStr, S: string): Integer;
var
Found, Len, Pos: integer;
begin
Pos := Length(S);
Len := Length(SubStr);
Found := 0;
while (Pos > 0) and (Found = 0) do
begin
if Copy(S, Pos, Len) = SubStr then
Found := Pos;
Dec(Pos);
end;
LastPos := Found;
end; |