delphi 统计一个文本的文字重复次数并且排序(高手题目)
比如: 1,1,2,3,4,5,1,5,5,1,2,3,
结果:1,5,2,3,4
1出现4次 所以排第一
5出现3次 排第二
………
………
TheFiend 朋友的算法还差点点
如果2个数出现的重复数是一样多的话 那么就按数字的从大到小排列
如 1,1,2,3,4
结果返回的字符串 1,4,3,2 展开
又是你...
function MySort(List: TStringList; Index1, Index2: Integer): Integer;
var
I,J:Integer;
begin
I:=Integer(List.Objects[Index1]);
J:=Integer(List.Objects[Index2]);
if i>j then
Result:=-1
else
if i<j then
Result:=1
else
Result:=0;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
slResult,slTmp:TStringList;
I,Idx:Integer;
begin
mmo1.Clear;
slTmp:=TStringList.Create;
slResult:=TStringList.Create;
try
//统计.
//注意这个,如果是英文的逗号.
slTmp.Delimiter:=',';
slTmp.DelimitedText:=edt1.Text;
for I:=0 to slTmp.Count-1 do
begin
Idx:=slResult.IndexOf(slTmp[i]);
if Idx=-1 then
slResult.AddObject(slTmp[i],TObject(1))
else
slResult.Objects[Idx]:=TObject(Integer(slResult.Objects[idx])+1);
end;
//排序
slResult.CustomSort(MySort);
//打印
for I:=0 to slResult.Count-1 do
mmo1.Lines.Add(Format('排第%D位的是%S,个数:%D',[i+1,slResult[i],Integer(slResult.Objects[i])]));
finally
slResult.Free;
slTmp.Free;
end;
end;
var
s1,s2:string;
i:integer;
begin
s1:='112345155123';
for i:=1 to length(s1) do
begin
s2:= copy(s1,i,1);
if pos(s2,memo1.Text)=0 then
begin
memo1.Lines.Add(s2);
end;
end;