AGB  ·  Datenschutz  ·  Impressum  







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

Zeichen zählen

Ein Thema von dinu_ch · begonnen am 3. Sep 2003 · letzter Beitrag vom 3. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
dinu_ch

Registriert seit: 3. Sep 2003
17 Beiträge
 
#1

Zeichen zählen

  Alt 3. Sep 2003, 14:25
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Zeichen zählen

  Alt 3. Sep 2003, 15:49
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;
  Mit Zitat antworten Zitat
dinu_ch

Registriert seit: 3. Sep 2003
17 Beiträge
 
#3

Re: Zeichen zählen

  Alt 3. Sep 2003, 15:54
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
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Zeichen zählen

  Alt 3. Sep 2003, 16:01
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]
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zeichen zählen

  Alt 3. Sep 2003, 16:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Zeichen zählen

  Alt 3. Sep 2003, 16:15
@Wormid:

Es muss aber:

for i := 1 to Length(S) do Inc(C[S[i]]); heißen.
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Zeichen zählen

  Alt 3. Sep 2003, 16:48
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.



Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zeichen zählen

  Alt 3. Sep 2003, 18:26
Moin Matze,

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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Zeichen zählen

  Alt 3. Sep 2003, 18:32
Achso, danke Chris!

Aber

C: Array['a'..'z'] of string; wäre doch auch gegangen, wieso nimmt man dann integer?
Benötigt das weniger Speicher?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Zeichen zählen

  Alt 3. Sep 2003, 18:35
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 10:47 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