并不复杂,但可能算法烦一点,用一个标识,一个循环,一个整数。
从字符串第一个字符开始比较,如果找到一个字符和子串的第一个字符相同,则将
标识设成真,再接下去比较,如果中间出现了不同,则将标识成假。如是到结束。
大至如下
function pos(s1,s2:string):integer;
var bFind:boolean
i,j:integer;
begin
j:=1
bFind:=False;
for i:=1 to length(s2) do
begin
if j<=Length(s1) then
if s1=s2[j] then
begin
if j=1 then result:=i
inc(j);bFind:=true
end
else begin j:=1
bFind:=false result:=0 ;end;
end
else
Result:=0;
end;
end;
写得比较急,可以自己改一下
ss:='a1234b';
si:='1234';
for i:=0 to length(ss)-1 do
begin
for j:=0 to length(si)-1 do
begin
if (ss[i+j]<>si[j]) then break
else
if j=(length(si)-1) then //如果j已于长度减1相等,说明已经比较完si了
a:=i
//将ss中开始位置i赋值给a
end;
end;
Edit1.Text := inttostr(a);
end;
function mypos(s1,s2:string):integer;
var
i:integer;
begin
Result:=0;
for i:=1 to length(s2) do
if s1[1]=s2 then
if s1=copy(s2,i,length(s1)) then
begin
Result:=i;
break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(mypos('123','a1234b')));
end;