Ich habe aus der Kanone mal eine Zwille gemacht.
Quick and dirty ohne Klassen ohne Objektlisten:
Ermitteln der Häufigkeit:
Delphi-Quellcode:
unit Unit6;
interface
uses
SysUtils;
type TCharRecord =
record
FChar: AnsiChar;
FCharCnt: Cardinal;
end;
var
CharRecordArray:
array [1..26]
of TCharRecord;
procedure CntCharOccurrence(Text: AnsiString);
implementation
procedure CntCharOccurrence(Text: AnsiString);
var
i, j: Integer;
MyOrdChar: Integer;
s: AnsiString;
begin
// Init array
for j := 1
to 26
do
begin
CharRecordArray[j].FChar := Chr(j + 64);
CharRecordArray[j].FCharCnt := 0;
end;
s := AnsiUpperCase(Text);
for i := 1
to Length(s)
do
begin
MyOrdChar := Ord(s[i]) - 64;
// A = 1, B = 2, ...
if (MyOrdChar
in [1..26])
then
begin
CharRecordArray[MyOrdChar].FCharCnt := CharRecordArray[MyOrdChar].FCharCnt + 1;
end;
end;
end;
end.
Aufruf:
Delphi-Quellcode:
procedure TForm5.btn1Click(Sender: TObject);
var
i: Integer;
s: AnsiString;
begin
s := '';
CntCharOccurrence(mmo1.Text);
for i := 1 to 26 do
begin
s := s + Format('%s: %d', [CharRecordArray[i].FChar, CharRecordArray[i].FCharCnt]) + #13#10;
end;
ShowMessage(s);
end;
Die Erweiterung um den prozentualen Anteil sollte jetzt kein Problem sein. Den Record um das entsprechende Feld erweitern und nach der Ermittlung der Häufigkeit noch mal in einer Schleife das Array durchgehen und den Prozentualen Anteil ermitteln.