Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeichen zählen (https://www.delphipraxis.net/8380-zeichen-zaehlen.html)

dinu_ch 3. Sep 2003 14:25


Zeichen zählen
 
Hallo

Ich bin Delphi-Neuling - wie kann ich möglichst einfach in einer Konsolenanwendung die Zeichen eines Strings zählen ? So dass alle vorhandenen Strings ausgegeben werden-z.B :

e : 5
g : 2
t : 3

Von mir aus können auch alle anderen die nicht vorhanden sind mit 0 ausgegeben werden.

dinu_ch

Matze 3. Sep 2003 15:49

Re: Zeichen zählen
 
Hi!
Willkommen in der DP!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, Anzahl: integer;
    Wort, Buchstabe: string;
begin
  Wort:='Matthias';
  Buchstabe:='t';
  Anzahl:=0;

  for i:=0 to Length(Wort) do
  if Wort[i] = Buchstabe then inc(Anzahl);
  Label1.Caption:=IntToStr(Anzahl);
end;

dinu_ch 3. Sep 2003 15:54

Re: Zeichen zählen
 
Danke erstmals - da bin ich schon viel weiter.

Und wie kann ich die Anzahl aller Buchstaben die vorkommen auslisten :

zum Beispiel bei Hallo :

1 x H
1 x a
2 x l
1 x o

Wormid 3. Sep 2003 16:01

Re: Zeichen zählen
 
Diese Version hier zählt alle Buchstaben von a bis z in dem String S.
Man könnte das ganze vielleicht auch mit Sets (Mengentypen) lösen. Das wäre vor allem dann sinnvoll, wenn noch Umlaute und Sonderzeichen mit abgeprüft werden sollen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var S: String;
    i: Integer;
    C: Array['a'..'z'] of Integer;
    X: Char;
begin
  S := LowerCase('Dies hier ist mein Text');
  ZeroMemory(@C, SizeOf(C)); // Array mit Nullen füllen

  for i := 1 to Length(S) do Inc(C[S[i]]);

  // Ausgabe zum testen...
  for X := Low(C) to High(C) do
    if C[X] > 0 then
      Memo1.Lines.Add(X + ': ' + IntTostr(C[X]));
end;
Im Array "C" stehen dann die Anzahl der Buchstaben drin. (z.B.: Memo1.Lines.Add(IntToStr(C['a']) gibt die Anzahl der "a"s aus)

Gruß

Wormid

[Edit: Matzes Einwand war korrekt... Fehler behoben]

Matze 3. Sep 2003 16:11

Re: Zeichen zählen
 
Hi Wormid!

Kannst du mir erklären, wieso man in deinem Fall dem "array C of integer" Buchstaben zuordnen kann. Das verstehe ich ja überhaupt nicht, ich dachte ein Integer besteht immer aus Zahlen.

Wäre nett, wenn du mich aufklärst. ;)

Matze 3. Sep 2003 16:15

Re: Zeichen zählen
 
@Wormid:

Es muss aber:

Delphi-Quellcode:
for i := 1 to Length(S) do Inc(C[S[i]]);
heißen. ;)

Wormid 3. Sep 2003 16:48

Re: Zeichen zählen
 
Zitat:

Zitat von Matze
Kannst du mir erklären, wieso man in deinem Fall dem "array C of integer" Buchstaben zuordnen kann. Das verstehe ich ja überhaupt nicht, ich dachte ein Integer besteht immer aus Zahlen.

Wenn mich nicht alles täuscht, dann macht Delphi automatisch einen Integerwert aus den Buchstaben (via Ord(c: Char) ???), wenn man das so benutzt. Aber so hunderprozentig kann ich dir das auch nicht erklären.

Was Deinen Einwand mit dem Fehler angeht: Du hast recht, ich habe das editiert.

:hi:

Wormid

Christian Seehase 3. Sep 2003 18:26

Re: Zeichen zählen
 
Moin Matze,

Zitat:

Zitat von Matze
Kannst du mir erklären, wieso man in deinem Fall dem "array C of integer" Buchstaben zuordnen kann.

Du kannst für den Bereich eines Arrays auch jeden Aufzählungstyp angeben, z.B. Array [boolean] of .... (was auch immer).

Bei Boolean wären die Indizes 0 und 1 zugelassen, bei Wormids Variante gehen sie von 97 bis 122.

Derartige Angaben sind möglich, solange die Gesamtgrösse 2 GB nicht übersteigt. array [integer] of integer geht beispielsweise nicht.
Man kann es aber natürlich auch mit eigenen Typen machen z.B

Delphi-Quellcode:
type
  TTest = (t1,t2,t3);

var
  c : array [TTest] of integer;
  i : TTest;

begin
  for i := t1 to t3 do

Matze 3. Sep 2003 18:32

Re: Zeichen zählen
 
Achso, danke Chris!

Aber

Delphi-Quellcode:
C: Array['a'..'z'] of string;
wäre doch auch gegangen, wieso nimmt man dann integer?
Benötigt das weniger Speicher?

Christian Seehase 3. Sep 2003 18:35

Re: Zeichen zählen
 
Moin Matze,

das ist das Array in dem gespeichert werden soll, wie oft welcher Buchstabe vorkommt (Inc(C[S[i]]);)

Wobie diese Variante nur mit Kleinbuchstaben funktionieren dürfte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz