小弟最近写一程序,需要计算某一文档中,某字符串的个数,自己动手写了个函数,如下: function tform1.mypos(sub:string;s:string):integer;
var i,geshu,num:integer;s1:string;
begin
s1:=s; num:=0;
geshu:=length(sub);
while(pos(sub,s1)<>0) do
begin
num:=num+1;
i:=pos('是',s1);
s1:=copy(s1,geshu+i,length(s1));
end;
result:=num;
end;上面的代码已经可以使用了,但是本人感觉很慢,因为是在一个循环语句下(for)调用此函数,计算不同字符串在原文档中出现的个数。请教各位大侠,有没有更好的办法,效率更高的。先谢谢大家了。
var i,geshu,num:integer;s1:string;
begin
s1:=s; num:=0;
geshu:=length(sub);
while(pos(sub,s1)<>0) do
begin
num:=num+1;
i:=pos('是',s1);
s1:=copy(s1,geshu+i,length(s1));
end;
result:=num;
end;上面的代码已经可以使用了,但是本人感觉很慢,因为是在一个循环语句下(for)调用此函数,计算不同字符串在原文档中出现的个数。请教各位大侠,有没有更好的办法,效率更高的。先谢谢大家了。
while(pos(sub,s1)<>0) do
begin
num:=num+1;
i:=pos('是',s1);
s1:=copy(s1,geshu+i,length(s1));
end;有专门的人测试过真正的FOR循环是最快的 建议LZ不用WHILE循环 用FOR试试
var i,geshu,num:integer;s1:string;
begin
s1:=s; num:=0;
geshu:=length(sub);
while(pos(sub,s1)<>0) do
begin
num:=num+1;
i:=pos('是',s1);
s1:=copy(s1,geshu+i,length(s1));
end;
result:=num;
end;之前贴错了,这个才是,大家再看看。我不认为换成for循环会有大的改善。^_^!