Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zählen, wie oft ein Zeichen in einem String vorkommt


antonc - Do 08.02.07 18:34
Titel: Zählen, wie oft ein Zeichen in einem String vorkommt
Hallo,

wie kann ich zählen wie oft ein string ein bestimmtes Zeichen enthält?

MFG Anton


Chryzler - Do 08.02.07 18:38

Du gehst jedes Zeichen im String einzeln durch, am besten mit einer For-Schleife, und zählst dann die Anzahl des bestimmten Zeichens.


F34r0fTh3D4rk - Do 08.02.07 20:54


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  anzahlen: array [0..255of integer;
  astr: string;
  i: integer;
begin
  for i := 1 to length(astr) do
    anzahlen[ord(astr[i])] := anzahlen[chr(astr[i])] + 1;
end;


ungetestet, aber sollte laufen, dann kannst du das so ausgeben (memo1 vorrausgesetzt):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  i: integer;
begin
  for i := 0 to 255 do
    memo1.lines.add('Das Zeichen ' + chr(i) + ' kommt ' + inttostr(anzahlen[i]) + ' mal vor'
end;


natürlich sind da auch viele nicht druckbare zeichen dabei, aber ich denke die bekommst du noch gefiltert, ist ja nur der grundansatz ;)

wenns nur um ein bestimmtes zeichen geht, reicht eine if abfrage:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: integer;
  astr: string;
  count: integer;
begin
  for i := 1 to length(astr) do
    if astr[i] = 'a' then
      inc(count);
end;


Chryzler - Do 08.02.07 21:21

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: integer;
  astr: string;
  count: integer;
begin
  for i := 1 to length(astr) do
    if astr[i] = 'a' then
      inc(count);
end;

Also, ich würde die count-Variable vor der Schleife noch auf Null setzen...


JayEff - Do 08.02.07 21:33

user profile iconChryzler hat folgendes geschrieben:
Also, ich würde die count-Variable vor der Schleife noch auf Null setzen...
Integervariablen werden immer mit 0 initialisiert, darum meckert auch der compiler nicht "[Warnung] blah könnte nicht initialisiert sein blah".