你可以试试下面的方法: 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; 我调试过了没 问题的。。
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;
我调试过了没 问题的。。
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;
如果想对整数进行排序,可以利用新版本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;
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;
为何不直接用#13而是用#13 + #10,回车不是已经包含了换行了吗???????
Compare是回调函数,sort只是将MySort 当参数传递进去,在SORT内部调用MYSORT,具体可以去看TLIST源码