大家好,今天我在网上搜到提高统计个数的高效的文章,如下:
————————————
function CountSubStr(const SubStr, Source: string): Integer; // 注意,必须加const或者var关键字
var
  i, n, len1, len2: Integer;
begin
  result := 0;
  i := 1;
  len1 := Length(SubStr);
  len2 := Length(Source)-len1+1;
  while (i <=len2) do
    begin
      showmessage(inttostr(length(string(@Source[i]))));
      n := pos(SubStr, string(@Source[i])); // 这里的技巧是高效的关键, 直接将上一次找到的位置作为字符串的起始传入pos函数
      if n > 0 then
        begin
          inc(result);
          inc(i, n+len1-1);
        end
      else
        break;
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(inttostr(CountSubStr('12','12345129')));
end;
——————————————
对string(@Source[i])这句不是很理解,明明是STRING类型,怎么变成数组型了,由于本人学DELPHI只是刚起步,望前辈指点一二。

解决方案 »

  1.   

    你应当看看D的字符类型。
     char:单字节字符;
     pchar:字符类型指针;
     string:字符串类型(其实是一种动态字符数组,是动态数组的话,就可以用一个指针来指向这个数组(其实此时的STRING类型的变量相当于一个隐含的指针了:),当然可以取其中某个字符的地址,通过指针方式访问字符串中某个字符了。呵呵~~)
      

  2.   

    string[i]的形式就是i位置的char型字符。
      

  3.   

    问:PCHAR也可以像STRING这么用数组的方式做吗?