AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstaben zählen

Ein Thema von michapitbull · begonnen am 23. Sep 2009 · letzter Beitrag vom 23. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
michapitbull

Registriert seit: 3. Dez 2008
7 Beiträge
 
#1

Buchstaben zählen

  Alt 23. Sep 2009, 17:54
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 ?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:02
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:04
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] [/roter Kasten]
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:08
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:08
[OT]
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
  Mit Zitat antworten Zitat
michapitbull

Registriert seit: 3. Dez 2008
7 Beiträge
 
#6

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:13
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] = 'aand 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 ?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:16
.. 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:= 'ato 'zdo
    zArray[c] := 0;
  s:= 'ZZZZccddaaaaabaumeinzweidrei';
  for i:=1 to length(s) do
    for c:= 'ato 'zdo
      begin
        if lowerCase(s[i]) = c then
          inc(zArray[c]);
      end;

  // Ausgabe
  sOut := '';
  for c := 'ato 'zdo
    begin
      i:=0;
      while i < zArray[c] do
        begin
          sOut:=sOut+c;
          inc(i);
        end;
    end;

  showMessage(sOut);
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
michapitbull

Registriert seit: 3. Dez 2008
7 Beiträge
 
#8

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:20
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 ?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Buchstaben zählen

  Alt 23. Sep 2009, 18:38
.. 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 := 'ato 'zdo
  begin
    for i:=1 to length(s) do
      if c = lowerCase(s[i]) then
        sOut := sOut + s[i];
  end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Buchstaben zählen

  Alt 23. Sep 2009, 19:01
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.
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