W
waderlym
Unregistered / Unconfirmed
GUEST, unregistred user!
我想把一个字符串按编码大小的顺序排列起来:用的是冒泡排序,试了在字符串中排列字符或者转为数组来做结果2个结果都错 转出来的还不一样请教原因:
procedure TForm1.Button1Click(Sender: TObject);//在字符串中排
var i,j,l:integer;
ss:string;
ff:char;
begin
if memo1.Lines.Count>0 then
begin
ss:='';
for i:=0 to memo1.Lines.Count-1 do
begin
ss:=ss+memo1.Lines.Strings;
end;
ff:=char(0);
for j:=1 to length(ss) do
begin
for l:=1 to (length(ss)-1-j) do
begin
if word(ss[l])>word(ss[l+1]) then
ff:=ss[l];
ss[l]:=ss[l+1];
ss[l+1]:=ff;
end;
end;
memo2.Lines.Add(ss);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);//转为数组后排列
var i,j,l,t:integer;
ss:string;
ff:char;
aa:array of char;
begin
if memo1.Lines.Count>0 then
begin
ss:='';
for i:=0 to memo1.Lines.Count-1 do
begin
ss:=ss+memo1.Lines.Strings;
end;
ff:=char(0);
setlength(aa,length(ss));
for t:=0 to length(ss)-1 do
begin
aa[t]:=ss[t+1];
end;
for j:=low(aa) to high(aa) do
begin
for l:=low(aa) to (high(aa)-1-j) do
begin
if word(aa[l])>word(aa[l+1]) then
ff:=aa[l];
aa[l]:=aa[l+1];
aa[l+1]:=ff;
end;
end;
for t:=0 to length(ss)-1 do
begin
ss[t+1]:=aa[t];
end;
memo2.Lines.Add(ss);
end;
end;
1.在MEMO1输入 'acdvdfbdfbdfbgfbsgfbfg'
第一个转出来是:fffgsffgffffffffvv
第2个转出来是:gfffgsffgffffffffvv
2.输入:'我爱你才怪猪'
第一个转出来是:峙排沣鞍耙
第2个转出来是:砼排陪惆鞍
我自己知道肯定是编码的问题请问如何解决,如何才能得到我本意的程序:
procedure TForm1.Button1Click(Sender: TObject);//在字符串中排
var i,j,l:integer;
ss:string;
ff:char;
begin
if memo1.Lines.Count>0 then
begin
ss:='';
for i:=0 to memo1.Lines.Count-1 do
begin
ss:=ss+memo1.Lines.Strings;
end;
ff:=char(0);
for j:=1 to length(ss) do
begin
for l:=1 to (length(ss)-1-j) do
begin
if word(ss[l])>word(ss[l+1]) then
ff:=ss[l];
ss[l]:=ss[l+1];
ss[l+1]:=ff;
end;
end;
memo2.Lines.Add(ss);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);//转为数组后排列
var i,j,l,t:integer;
ss:string;
ff:char;
aa:array of char;
begin
if memo1.Lines.Count>0 then
begin
ss:='';
for i:=0 to memo1.Lines.Count-1 do
begin
ss:=ss+memo1.Lines.Strings;
end;
ff:=char(0);
setlength(aa,length(ss));
for t:=0 to length(ss)-1 do
begin
aa[t]:=ss[t+1];
end;
for j:=low(aa) to high(aa) do
begin
for l:=low(aa) to (high(aa)-1-j) do
begin
if word(aa[l])>word(aa[l+1]) then
ff:=aa[l];
aa[l]:=aa[l+1];
aa[l+1]:=ff;
end;
end;
for t:=0 to length(ss)-1 do
begin
ss[t+1]:=aa[t];
end;
memo2.Lines.Add(ss);
end;
end;
1.在MEMO1输入 'acdvdfbdfbdfbgfbsgfbfg'
第一个转出来是:fffgsffgffffffffvv
第2个转出来是:gfffgsffgffffffffvv
2.输入:'我爱你才怪猪'
第一个转出来是:峙排沣鞍耙
第2个转出来是:砼排陪惆鞍
我自己知道肯定是编码的问题请问如何解决,如何才能得到我本意的程序: