Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Поиск N-ого вхождения подстроки в строку

Delphi , Синтаксис , Текст и Строки



Автор: Panov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Зависимости: SysUtils
Автор:       panov, panov@hotbox.ru, Екатеринбург
Copyright:   panov
Дата:        19 апреля 2002 г.
***************************************************** }

function SearchString(const FindStr, SourceString: string; Num: Integer):
  Integer;
var
  FirstSym: PChar; //Ссылка на первый символ

  function MyPos(const FindStr, SourceString: PChar; Num: Integer): PChar;
  begin
    Result := AnsiStrPos(SourceString, FindStr);
      //Поиск вхождения подстроки в строку
    if (Result = nil) then
      Exit; //Подстрока не найдена
    Inc(Result); //Смещаем указатель на следующий символ
    if Num = 1 then
      Exit; //Если нужно первое вхождение - заканчиваем
    if num > 1 then
      Result := MyPos(FindStr, Result, num - 1);
    //Рекурсивный поиск следующего вхождения
  end;

begin
  FirstSym := PChar(SourceString);
  //Присваиваем адрес первого символа исходной строки
  Result := MyPos(PChar(FindStr), PChar(SourceString), Num) - FirstSym;
  //Номер позиции в строке
  if Result < 0 then
    Result := 0; //Возвращаем номер позиции
end;

Пример использования:

var
  StrF, StrSrc: string;
  n: Integer;
begin
  ...
  StrF := 'стр';
  StrSrc := 'Поиск подстроки в строке';
  n := SearchString(StrF, StrSrc, 2); //n будет равна 19
end;

Программа на Delphi для поиска N-го вхождения подстроки в строке.

Функции и переменные

  • SearchString: Главная функция, которая принимает три параметра: FindStr (подстрока для поиска), SourceString (оригинальная строка) и Num (число вхождений для поиска).
  • FirstSym: Указатель на первый символ SourceString.
  • MyPos: Рекурсивная функция, которая ищет N-е вхождение подстроки FindStr в SourceString. Она возвращает указатель на начало найденной подстроки.

Код

Функция SearchString работает следующим образом:

  1. Инициализируем FirstSym, чтобы он указывал на первый символ SourceString.
  2. Вызываем MyPos с параметрами FindStr, PChar(SourceString) и Num. Это начинает рекурсивный поиск.
  3. Если MyPos возвращает nil, то это означает, что подстрока не была найдена, поэтому возвращаем 0 (или специальное значение, указывающее на неудачу).
  4. Иначе, увеличиваем результат на 1, чтобы получить начало найденной подстроки в SourceString.
  5. Если Num равен 1, то прекращаем поиск и возвращаем результат.
  6. Если Num больше 1, то вызываем MyPos рекурсивно с оставшимися вхождениями (Num-1) и новым началом.

Функция MyPos работает следующим образом:

  1. Вызываем AnsiStrPos, чтобы найти первое вхождение подстроки FindStr в SourceString. Если не найдено, то возвращаем nil.
  2. Увеличиваем результат на 1, чтобы получить начало найденной подстроки в SourceString.
  3. Если Num равен 1, то прекращаем поиск и возвращаем результат.
  4. Иначе, вызываем MyPos рекурсивно с параметрами FindStr, новым началом и Num-1.

Пример использования

Пример кода создает две строки (StrF и StrSrc) и ищет второе вхождение 'стр' в 'Поиск подстроки в строке'. Результат хранится в n, который будет равен 19.

В целом, эта программа эффективно ищет N-е вхождение подстроки в строке с помощью рекурсии.

В статье описана функция SearchString на языке Delphi, которая ищет N-ое вхождение подстроки FindStr в строку SourceString.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 05:40:58/0.0056021213531494/0