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;
procedure TForm1.Button1Click(Sender: TObject);
var
StrF, StrSrc: string;
n: Integer;
begin
StrF := '国';
StrSrc := '中国华人民共和国万岁';
n := SearchString(StrF, StrSrc,1); //结果2
memo1.Lines.Add(inttostr(n));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
StrF, StrSrc: string;
n: Integer;
begin
StrF := '国';
StrSrc := '中国华人民共和国万岁';
n := SearchString(StrF, StrSrc,2); //结果8
memo1.Lines.Add(inttostr(n));
end;