////////排除相同数字
 function huyiinStr(str:string):string;
  var
  i:integer;
  str1:string;
 begin
 str1:='';
  for i:=0 to length(str)-1 do
    if  pos(str[i],str1)=0 then
        str1:=str1+str[i];
  result:=str1;
end;
如str:='123123',则huyiinStr(str):='123'对吗?

解决方案 »

  1.   

    有问题,字符串的下标是从1开始。改下:function huyiinStr(str:string):string;
    var
      i:integer;
      str1:string;
    begin
        str1:='';
        for i:=0 to length(str)-1 do
            if  pos(str[i+1],str1)=0 then
                str1:=str1+str[i+1];
        result:=str1;
    end;
      

  2.   

    代码应该没有问题,但是效率是一个非常大的问题。
    如果只是数字...那就简单多了。
    function huyiinStr(str: string):string; 
    var
      pByte_Src,pByte_Dst: PByte;
      Num_Arr: array [48..57] of Byte;
      iLen, iRealLen: Integer;
    begin 
      iLen := Length(str);
      iRealLen := 0;
      SetLength(Result, iLen);
      fillchar(Num_Arr, 10, 0);
      pByte_Src := PByte(PChar(str));
      pByte_Dst := PByte(PChar(Result));
      while iLen > 0 do begin
        if Num_Arr[pByte_Src^] = 0 then begin
          Num_Arr[pByte_Src^] := 1;
          pByte_Dst^ := pByte_Src^;
          Inc(iRealLen);
        end;
        Inc(pByte_Src);
        Dec(iLen);
      end;
      SetLength(Result, iRealLen); 
    end;
      

  3.   

    分数不是那么重要,关键是象你前面的处理实在效率太低了,比如一个相当长的串,那么就会有很多的Pos,也有很多的str1 := str1 + str[i]。