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 Buchstaben zählen (https://www.delphipraxis.net/140676-buchstaben-zaehlen.html)

michapitbull 23. Sep 2009 16:54


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:
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;
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 ?

Medium 23. Sep 2009 17:02

Re: Buchstaben zählen
 
Im Grunde kannst du dafür eine Art Histogramm erstellen. Wichtig ist dabei nur, dass du weisst was eine Bei Google suchenASCII Tabelle ist, also dass Zeichen letztlich auch nur Zahlen sind - nur anders dargestellt.

Delphi-Quellcode:
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;
In hist[65] (bzw. hist[Ord('A')], da Ord('A') = 65) steht hiernach z.B. wie viele große 'A' im String sind.

Der.Kaktus 23. Sep 2009 17:04

Re: Buchstaben zählen
 
Hi, versuch es doch einfach mal so
Delphi-Quellcode:
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;
[roter Kasten] :-D [/roter Kasten]

rollstuhlfahrer 23. Sep 2009 17:08

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:
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;
Die Ausgabe bleibt dir dann überlassen. Also einfach durch das gewonnene Array durchgehen und eben Anzahl-Mal so viele Zeichen generieren.

Bernhard

PS: Ist ja das Histogramm

p80286 23. Sep 2009 17:08

Re: Buchstaben zählen
 
[OT]
Zitat:

Zitat von michapitbull
... mehrere if Schleifen schreibe...

sie ist nicht kaputt zu kriegen, es gibt keine IF-Schleifen!
[/OT]

Mist, wieder mal nicht schnell genug.

K-H

michapitbull 23. Sep 2009 17:13

Re: Buchstaben zählen
 
Sollte mir vielleicht angewöhnen die Variablen lokal und nich global zu deklarieren.
hab das ganze jetzt so:

Delphi-Quellcode:
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;
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 ?

Klaus01 23. Sep 2009 17:16

Re: Buchstaben zählen
 
.. wenn hier schon jeder mit Code um sich wirft:

Meine Version:

Delphi-Quellcode:
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;
Grüße
Klaus

michapitbull 23. Sep 2009 17:20

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 ?

Klaus01 23. Sep 2009 17:38

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:
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;
Grüße
Klaus

himitsu 23. Sep 2009 18:01

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 08:44 Uhr.
Seite 1 von 2  1 2      

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