用递归过程怎么写?(50)

  • 主题发起人 主题发起人 hying95
  • 开始时间 开始时间
H

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:字符列表中有如下数据:110=35425=4809=25111=1032105=220如何按照“=”前面或后面进行升降序排序?
 
不是很清楚你说的意思,是想达到下面类似的效果么?09=25111=103225=48。。。可以用类似Map的结构存储,再进行处理,TStringList可以,然后再按需要进行排序
 
to wzdworld001以=号前排序结果:09=25111=103225=48105=220110=354以=号后面排序:25=48105=22009=251110=35411=1032不用递归也可以只要达到这种效果.
 
写一个函数获得字符串中=前面的数值,function GetValue(AStr:String;PreEqu:Boolean):Integer;var Index:Integer;begin Index:=Pos('=',AStr); if PreEqu then Result:=StrToInt( Copy(AStr,1,Index-1) ) else Result:=StrToInt( Copy(AStr,Index+1, Length(AStr) ) )end;---------------------通过循环进行排序。Var I,J,K,Value,TmpInt:Integer; S:String;begin for I:=0 to StrList.Count-2 do begin K:=I; Value := GetValue(StrList.Strings[K],True); For J:=I to StrList.Count-1 do begin TmpInt:= GetValue(StrList.Strings[K],True); if TmpInt<Value then begin Value:=TmpInt; K:=J; end; end; if K<>I Then begin S:=StrList.Strings[K]; StrList.Strings[K]:=StrList.Strings; StrList.Strings:=S; end; end;end;----------随手写的,有些地方可能有语法错误。
 
用TSTRINGLIST的SORT回调一个自定义的函数function compare(s1,s2: string): boolean;begin result := comparestring(S1的等号后面的STRING, S2的等号后面的STRING);end;StringList.Sort(compare);搞定
 
to znxia 没反应.排和不排一样.
 
刚才写错了,更改一些:Var I,J,K,Value,TmpInt:Integer; S:String;begin for I:=0 to StrList.Count-2 do begin K:=I; Value := GetValue(StrList.Strings[K],True); For J:=I to StrList.Count-1 do begin // TmpInt:= GetValue(StrList.Strings[K],True);更改为 TmpInt:= GetValue(StrList.Strings[J],True); if TmpInt<Value then begin Value:=TmpInt; K:=J; end; end; if K<>I Then begin S:=StrList.Strings[K]; StrList.Strings[K]:=StrList.Strings; StrList.Strings:=S; end; end;end;
 
to 我爱PASCAL你的好象不行to znxia你的已经可以了
 
多谢各位大侠,问题解决了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
815
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部