在一个窗体上放两个edit框,一个button按钮,在edit1框中输入一行数字,数字之间用逗号隔开,按一下button实现排序,把排好序的数字在edit2中输出。

解决方案 »

  1.   

    Pos截取Edit1.Text,转换为数据,排序,转换为字符串,合并输出到Edit2.Text家里小本没装Delphi
      

  2.   

    你可以试试下面的方法:
    procedure TForm1.Button1Click(Sender: TObject);
    var s,e:string;
        I,J,m,n,b:integer;
        A:array of integer;
    begin
         s:=edit1.Text;
         J:=(length(s)+1) div 2;
         setlength(A,j);
         m:=length(s);
         n:=0;
         b:=0;
         for i:=1 to M do  //首先将edit中的数字存进数组
            begin
               if s[i]=',' then
                  begin
                     A[n]:=strtoint(copy(s,b+1,i-b-1));
                     b:=i;
                     n:=n+1;
                     if pos(',',copy(s,b+1,m-b))=0 then
                        begin
                           A[n]:=strtoint(copy(s,b+1,m-b));
                           break;
                        end;
                  end;
            end;
         for i:=0 to n-1  do  //从小到大排序
            for j:=i+1 to n do
               begin
                  if A[i]>A[j] then
                     begin
                        b:=A[i];
                        m:=A[j];
                        A[i]:=m;
                        A[j]:=b;
                     end;           end;
         s:='';
         for i:=0 to n-1 do //输出
            begin
               e:=inttostr(A[i])+',';
               s:=s+e;
            end;
         s:=s+inttostr(A[i]);
         edit2.Text:=s;
    end;
    我调试过了没 问题的。。
      

  3.   

    楼上的复杂了procedure TForm1.Button1Click(Sender: TObject);
    var
      StrList: TStringList;
      Str: String;
    begin
      StrList := TStringList.Create;
      Str := Trim(Edit1.Text);
      Str := SysUtils.StringReplace(Str, ',', #13 + #10, [rfReplaceAll]);
      StrList.Text := Str;
      StrList.Sort;
      Str := StrList.Text;
      Str := SysUtils.StringReplace(Str, #13 + #10, ',', [rfReplaceAll]);
      Str := Copy(Str, 1, Length(Str) - 1);
      Edit2.Text := Str;
      StrList.Free;
    end;
      

  4.   

    TStringList的排序时按照字符来排序的,“1,2,12,11”排序的结果会是“1,11,12,2”,不是楼主想要的效果
    如果想对整数进行排序,可以利用新版本Delphi中的泛型支持来简化代码代码
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Str: TStringList;
      StrArr: array of Integer;
      i: Integer;
    begin
      Str := TStringList.Create;
      Str.Delimiter := ',';
      Str.DelimitedText := Edit1.Text;
      SetLength(StrArr, Str.Count);
      for i := 0 to Str.Count - 1 do
        StrArr[i] := StrToInt(Str.Strings[i]);
      TArray.Sort<Integer>(StrArr);
      for i := 0 to Str.Count - 2 do
        Edit2.Text := Edit2.Text + IntToStr(StrArr[i]) + ',';
      Edit2.Text := Edit2.Text + IntToStr(StrArr[Str.Count - 1]);
      Str.Free;
    end;
      

  5.   

    漏了一点,使用泛型支持需要引用单元“Generics.Collections”
      

  6.   


    function MySort(Item1, Item2: Pointer): Integer;
    begin
      if (Integer(Item1)) > (Integer(Item2)) then
        Result := 1
      else if (Integer(Item1)) < (Integer(Item2)) then
        Result := -1
      else
        Result := 0;
    end;var
      AList: TList;
      StrList: TStringList;
      Str: String;
      I: Integer;
    begin
      AList := TList.Create;
      StrList := TStringList.Create;
      Str := SysUtils.StringReplace(Edit1.Text, ',', #13 + #10, [rfReplaceAll]);
      StrList.Text := Str;  for I := 0 to StrList.Count - 1 do
        AList.Add(Pointer(StrToInt(StrList[I])));
      AList.Sort(MySort);  Str := '';
      for I := 0 to AList.Count - 1 do
        Str := Str + IntToStr(Integer(AList[I])) + ',';
      Str := Copy(Str, 1, Length(Str) - 1);
      Edit2.Text := Str;
      StrList.Free;
      AList.Free;
    end;
      

  7.   

    楼上的在Str := SysUtils.StringReplace(Edit1.Text, ',', #13 + #10, [rfReplaceAll])时
    为何不直接用#13而是用#13 + #10,回车不是已经包含了换行了吗???????
      

  8.   

    AList.Sort(MySort);MySort的参数如何传进去的??????
      

  9.   

    procedure TList.Sort(Compare: TListSortCompare);
    Compare是回调函数,sort只是将MySort 当参数传递进去,在SORT内部调用MYSORT,具体可以去看TLIST源码