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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!