小弟最近写一程序,需要计算某一文档中,某字符串的个数,自己动手写了个函数,如下:   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)调用此函数,计算不同字符串在原文档中出现的个数。请教各位大侠,有没有更好的办法,效率更高的。先谢谢大家了。

解决方案 »

  1.   


      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试试 
      

  2.   

    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循环会有大的改善。^_^!