![]() |
Buchstaben zählen
Moin,
ich soll ein Programm schreiben, das Buchstaben zählt. Das heißt ich habe ein Editfeld, einen Button und ein Label. In das Edit Feld soll ich einen beliebigen Text eingeben und dann die Anzahl der Buchstaben im Label ausgeben lassen. Also nehmen wir mal als Beispiel "Der Hund jagt die Katze" dann soll im Label stehen:aaddee.... usw. da 2 zwei man enthalten ist,ihr versteht schon ^^. Nun bin ich so weit, dass ich das ganze nur mit einem a machen kann und so sieht mein Quellcode aus :
Delphi-Quellcode:
ich hab es schon versucht einfach hinter if satz[buchstabe] = 'a' mehrere Bedingungen anzuknüpfen aber ich komme zu keinem Ergebnis, dann meckert delphi nämlich immer rum, dass FOR-Schleifen eine einfache lokale Variable sein muss, was mir aber nicht wirklich was sagt. Mir ist klar, dass es funktioniert wenn ich eine mehrere if Schleifen schreibe für jeden einzelnen Buchstaben, aber das ist nicht mein ziel. Könnt ihr mir da helfen ?
procedure TForm1.Button1Click(Sender: TObject);
begin satz:=edit1.Text; zaehlen:=length(satz); for buchstabe:=1 to zaehlen do begin if satz[buchstabe] = 'a' then neuertext := neuertext + satz [buchstabe]; end; label1.Caption:=neuertext; end; |
Re: Buchstaben zählen
Im Grunde kannst du dafür eine Art Histogramm erstellen. Wichtig ist dabei nur, dass du weisst was eine
![]()
Delphi-Quellcode:
In hist[65] (bzw. hist[Ord('A')], da Ord('A') = 65) steht hiernach z.B. wie viele große 'A' im String sind.
var
s: String; i: Integer; hist: array[byte] of Integer; begin s := 'Der Hund jagt die Katze'; for i := 1 to Length(s) do inc(hist[Ord(s[i])]); end; |
Re: Buchstaben zählen
Hi, versuch es doch einfach mal so
Delphi-Quellcode:
[roter Kasten] :-D [/roter Kasten]
procedure TForm1.Button1Click(Sender: TObject);
var buchstabe,zaehlen:integer; <<------------------------------eingefuegt = lokale Variablen begin satz:=edit1.Text; zaehlen:=length(satz); for buchstabe:=1 to zaehlen do begin if satz[buchstabe] = 'a' then neuertext := neuertext + satz [buchstabe]; end; label1.Caption:=neuertext; end; |
Re: Buchstaben zählen
HI,
für dein Buchstaben zählen hätte ich einen ganz anderen Ansatz gewählt. Zuerst würde ich ein Array mit den entsprechenden Anzahlen der Zeichen füllen und dann dieses Array wieder ausgeben. Im Grunde geht das dann so:
Delphi-Quellcode:
Die Ausgabe bleibt dir dann überlassen. Also einfach durch das gewonnene Array durchgehen und eben Anzahl-Mal so viele Zeichen generieren.
procedure ArrayFüllen(s: str);
var myarray: array[char] of integer; i: Integer; begin for i := 1 to Length(s) do inc(myarray[s[i]]); end; Bernhard PS: Ist ja das Histogramm |
Re: Buchstaben zählen
[OT]
Zitat:
[/OT] Mist, wieder mal nicht schnell genug. K-H |
Re: Buchstaben zählen
Sollte mir vielleicht angewöhnen die Variablen lokal und nich global zu deklarieren.
hab das ganze jetzt so:
Delphi-Quellcode:
okay danke. Also es scheint ja mit einem array zu gehen, aber das hatten wir in der Schule noch nich. Ich denke wir sollen das so machen wie ich es schon versucht habe. Wie würde es dann gehen ? Würde es mit eine While ... do Schleife oder For... to...do Schleife irgendwie funktionieren ?
procedure TForm1.Button1Click(Sender: TObject);
var satz,neuertext:string; buchstabe,zaehlen:integer; begin satz:=edit1.Text; zaehlen:=length(satz); for buchstabe:=1 to zaehlen do begin if satz[buchstabe] = 'a' and satz[buchstabe] = 'B' <---- warum ist hier das 2. = Zeichen falsch ? then neuertext := neuertext + satz [buchstabe]; end; label1.Caption:=neuertext; |
Re: Buchstaben zählen
.. wenn hier schon jeder mit Code um sich wirft:
Meine Version:
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var zArray : Array['a'..'z'] of Byte; c : Char; s : String; sOut : String; i : Integer; begin // init for c:= 'a' to 'z' do zArray[c] := 0; s:= 'ZZZZccddaaaaabaumeinzweidrei'; for i:=1 to length(s) do for c:= 'a' to 'z' do begin if lowerCase(s[i]) = c then inc(zArray[c]); end; // Ausgabe sOut := ''; for c := 'a' to 'z' do begin i:=0; while i < zArray[c] do begin sOut:=sOut+c; inc(i); end; end; showMessage(sOut); end; Klaus |
Re: Buchstaben zählen
okay danke. Also es scheint ja mit einem array zu gehen, aber das hatten wir in der Schule noch nich. Ich denke wir sollen das so machen wie ich es schon versucht habe. Wie würde es dann gehen ? Würde es mit eine While ... do Schleife oder For... to...do Schleife irgendwie funktionieren ?
|
Re: Buchstaben zählen
.. ohne Array wird das aber recht unübersichtlich.
Wie willst Du dir denn merken wie oft das a oder b bereits in dem Satz vorhanden waren? Alternativ ohne Array:
Delphi-Quellcode:
Grüße
sOut := '';
for c := 'a' to 'z' do begin for i:=1 to length(s) do if c = lowerCase(s[i]) then sOut := sOut + s[i]; end; Klaus |
Re: Buchstaben zählen
Da es die Buchstaben nicht zählen, sondern sortieren soll, kann man auch einfach die Buchstaben sortieren.
> passende Sortieralgorithmen gibt es ja unmassen Und dann vorher oder nachher noch alle Zeichen entfernen, welche man nicht möchte, wie z.B. die Lerrzeichen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
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-2025 by Thomas Breitkreuz