{
Letzte Position von SubStr in S ermitteln.
Returns the last occurence of SubStr in S.
}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) dobeginif Copy(S, Pos, Len) = SubStr then
Found := Pos;
Dec(Pos);
end;
LastPos := Found;
end;
Here's the translation of the provided content into Russian:
Код - функция Delphi под именем LastPos, которая находит последнее вхождение заданного подстроки (SubStr) в строке (S). Она проходит по строке в обратном направлении, сравнивая символы текущей позиции с подстрокой, пока не найдет совпадение или не достигнет начала строки.
Разбивка кода:
Функция принимает два параметра: SubStr (подстрока для поиска) и S (оригинальная строка).
Она инициализирует три целочисленные переменные:
Pos: начинается с конца строки (Length(S)), будет уменьшаться при проходе в обратном направлении.
Len: длина подстроки (Length(SubStr)).
Found: флаг, который по умолчанию имеет значение 0, указывающий, не найдено ли подстрока еще.
Функция вступает в цикл while, продолжающийся, пока:
Pos больше 0 (т.е. мы еще не достигли начала строки).
Found все еще имеет значение 0 (т.е. мы еще не нашли подстроку).
Внутри цикла она проверяет, совпадают ли символы текущей позиции с подстрокой с помощью Copy(S, Pos, Len) = SubStr. Если они совпадают, она устанавливает Found в значение текущего Pos, указывая, что подстрока найдена.
Затем она уменьшает Pos на 1, чтобы переместиться назад на один символ в строке.
Когда цикл выходит (либо потому, что мы достигли начала строки, либо потому, что нашли подстроку), функция присваивает значение Found переменной LastPos.
Пример использования:
var
S: string;
begin
S := 'Hello World, Hello!';
LastPos('Hello', S); // Вывод: 13 (последнее вхождение 'Hello' - на позиции 13)
end.
Альтернативное решение:
Более эффективный подход будет использовать функцию LastIndexOf, предоставленную библиотекой строк Delphi. Эта функция ищет подстроку с конца строки и возвращает индекс последнего вхождения:
function LastPos(SubStr, S: string): Integer;
begin
Result := LastIndexOf(S, SubStr);
end;
Эта реализация более компактна и эффективна, так как она использует функциональность Delphi.
В статье описывается функция на языке Delphi для поиска последнего вхождения подстроки в строку.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.