11223344
1234556781.有N行数字,长度不定,我取其中一行(这个就当完成了),
然后判断这行数字(假如说是:11223344)包含的不同数字有几个?应该是4个
如果是123455678则是8个数字先问这个,以后还有其他问题,呵呵由于涉及到处理内容很多,所以想寻找最优的算法,谢谢
数字第一个不为0,其他数字可以是0
数字是不排序的,乱序.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
            i: integer;
            mStr: string;
            k: integer;
    begin
            k:=0;
            mStr := '11223345';
            for i:=0 to 9 do
                    if Pos(Chr(Ord('0')+i),mStr)>0 then
                            Inc(k);
            ShowMessage(IntToStr(k));
    end;
      

  2.   

    //提供两种方式
    function CharCount(mStr: string): Integer;
    begin
      Result := 0;
      while mStr <> '' do
      begin
        Inc(Result);
        mStr := StringReplace(mStr, mStr[1], '', [rfReplaceAll]);
      end;
    end; { CharCount }procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(CharCount('11223344')));
      ShowMessage(IntToStr(CharCount('123455678')));
    end;function NumberCount(mInteger: Integer): Integer;
    var
      C: Char;
      S: set of '0'..'9';
    begin
      Result := 0;
      S := [];
      while mInteger > 0 do
      begin
        C := Char(Ord('0') + mInteger mod 10);
        mInteger := mInteger div 10;
        if not (C in S) then
        begin
          Include(S, C);
          Inc(Result);
        end;
      end;
    end; { CharCount }procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(NumberCount(11223344)));
      ShowMessage(IntToStr(NumberCount(123455678)));
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
            i: integer;
            mStr: string;
            k: integer;
    begin
            k:=0;
            mStr := '11223345';
            for i:=0 to 9 do
                    if Pos(inttostr(i),mStr)>0 then
                            Inc(k);
            ShowMessage(IntToStr(k));
    end;