var
p:PChar;
i:Integer;
begin
p:=StrPos(PChar(str),'**'); // 문자열 str에서 '**'를 찾습니다.
if p<>nil then p:=StrPos(p+2,'**'); // 두번째 찾고...
if p<>nil then p:=StrPos(p+2,'**'); // 세번째 찾고...
그냥 허접하게 만들어봤네요. Str이라는 문자열에서 '1'이라는 문자를 찾으려고 할때 3번째 문자의 위치를 가지고 오는 거랍니다.
설명을 덧붙이자면 해당 문자의 위치를 찾을때마다 찾고자하는 문자를 다른 문자로 바꿔주면 다음에 찾고자 하는 문자가 나오면 위치가 Pos라는 함수에서 찾는 첫번째 위치가 되므로 원하는 위치를 찾을수 있겠지요.
제가 아직은 델파이 초보라.. 그래도 아쉬운데로 써보세요
procedure TForm1.Button1Click(Sender: TObject);
var
nPos : Integer;
nCnt : Integer;
str : String;
begin
Str := '000100100001000100001000';
nCnt :=1;
while Pos('1', Str) > 0 do begin
nPos := POS('1', Str);
Str[Pos('1', Str)] := '0';
if nCnt = 3 then begin
Edit3.Text:= InTtoStr(nPos);
exit;
end;
Inc(nCnt);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sStr : string;
nI , nC : integer;
Lst_Imsi : TStringList;
begin
sStr := '0000s000s00s1111';
nC := 0;
for nI := 1 to length(sStr) do
if copy(sStr , nI , 1) = 's' then begin
inc(nC);
if nC = 3 then showmessage( inttostr(nI) );
end;
function StrPos(const Str1, Str2: PChar): PChar;
StrPos는 PChar를 사용하기 때문에 임의의 위치부터 찾을수 있습니다.
예:)
var
p:PChar;
i:Integer;
begin
p:=StrPos(PChar(str),'**'); // 문자열 str에서 '**'를 찾습니다.
if p<>nil then p:=StrPos(p+2,'**'); // 두번째 찾고...
if p<>nil then p:=StrPos(p+2,'**'); // 세번째 찾고...
if p=nil then exit; // 못찾은 경우
i:=p-PChar(str)+1; // 찾은 위치의 인덱스 계산할