Code:

{ **** UBPFD *********** by delphibase.endimus ****

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

 

Зависимости: SysUtils

Автор: panov, panov @ hotbox.ru, Екатеринбург

Copyright: panov

 

***************************************************** }

 

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 = 1then

Exit; //Если нужно первое вхождение - заканчиваем

if num > 1then

Result := MyPos(FindStr, Result, num - 1);

//Рекурсивный поиск следующего вхождения

end;

 

begin

FirstSym := PChar(SourceString);

//Присваиваем адрес первого символа исходной строки

Result := MyPos(PChar(FindStr), PChar(SourceString), Num) - FirstSym;

//Номер позиции в строке

if Result < 0then

Result := 0; //Возвращаем номер позиции

end;

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

 

var

StrF, StrSrc: string;

n: Integer;

begin

...

StrF := 'стр';

StrSrc := 'Поиск подстроки в строке';

n := SearchString(StrF, StrSrc, 2); //n будет равна 19

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить