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 case und zähl problem (https://www.delphipraxis.net/133844-case-und-zaehl-problem.html)

mlhk 10. Mai 2009 16:30


case und zähl problem
 
hey,
ich stehte vor dem problem das ich aus einem eingabe feld jeden buchstaben durchgehe und dann schon was er im acsii code darstellt

Delphi-Quellcode:
case a of
69,101: label1.Caption:='E:';

end;
es geht mir nun darum wie ich heraus finde wie oft er im text vorkamm, den im moment stellt er ja nur fest ob es über habt diesen buchstaben gab
mfg
max

[edit=mkinzler]Delphi-Tag gefixt Mfg, mkinzler[/edit]

Jens Hartmann 10. Mai 2009 16:37

Re: case und zähl problem
 
Hallo,

du müsstest eine var. anlagen vom Typ integer, den Text durchgehen, und jedesmal wenn das Zeichen vorkommt die Var. hochzählen.

z.b. mit einer For Schleife oder so.

Gruß Jens

quendolineDD 10. Mai 2009 16:43

Re: case und zähl problem
 
Delphi-Quellcode:
var i : integer;
//im case dann
inc(i); //oder halt i := i+1;

mlhk 10. Mai 2009 16:52

Re: case und zähl problem
 
Delphi-Quellcode:
case a of
69,101: label1.Caption:='E:'+inc(c);

end;
jetzt stellt sich mir nur noch die frage wie ich das zusammen henge, das mit dem + sieht komisch aus
danke schon

jaenicke 10. Mai 2009 16:53

Re: case und zähl problem
 
Du musst hochzählen und dann die Zahl mit IntToStr ausgeben.

Wenn du wirklich nur einen bestimmten Buchstaben und nicht mehrere suchst, brauchst du kein case, da reicht ein simples if.

DeddyH 10. Mai 2009 16:56

Re: case und zähl problem
 
Hier eine weitere Möglichkeit (obwohl wir so etwas schon einmal in der DP hatten, da müssten auch hochoptimierte Lösungen zu finden sein):
Delphi-Quellcode:
type TCharArray = array['A'..'Z'] of integer; //für die Buchstaben A bis Z, ggf. erweitern

function CountChars(const Str: string): TCharArray;
var i: integer;
begin
  FillChar(Result,SizeOf(Result),0);
  for i := 1 to Length(Str) do
    if Upcase(Str[i]) in ['A'..'Z'] then //falls oben erweitert, auch hier anpassen
      inc(Result[Upcase(Str[i])]);
end;
Eine mögliche Auswertung könnte dann z.B. so aussehen:
Delphi-Quellcode:
procedure TMainForm.btnCountClick(Sender: TObject);
var arr: TCharArray;
    c: Char;
begin
  arr := CountChars('Emil und die Detektive');
  for c := Low(arr) to High(arr) do
    ListBox1.Items.Add(Format('%s: %d',[c,arr[c]]));
end;

mlhk 10. Mai 2009 17:00

Re: case und zähl problem
 
gut, ich will damit später dann noch weiter arbeiten und da kommt das schlecht in meinem konzept,
ich hab vor das auf das ganz alphabet auszubauen, warum geht
Delphi-Quellcode:
69,101: label1.Caption:= inttostr (inc(c));
das nicht

DeddyH 10. Mai 2009 17:01

Re: case und zähl problem
 
Weil inc eine Prozedur ist und somit keinen Rückgabewert liefert.

quendolineDD 10. Mai 2009 17:08

Re: case und zähl problem
 
Du müsstest erst erhöhen und dann kannst du c ausgeben.

DeddyH 10. Mai 2009 17:09

Re: case und zähl problem
 
Und zum Thema ganzes Alphabet: schau Dir #6 nochmal ganz genau an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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