Entwickler-Ecke
Sonstiges (Delphi) - Konsonaten/Vokale zählen
Od3on - Mi 18.05.05 16:17
Titel: Konsonaten/Vokale zählen
also, ich will ein progi schreiben, welches konsonanten, vokale und zahlen zählt und diese dann anzeigt.
brauche also button, label, edit.
ich hab mir überlegt, dass man dies mit array machen kann, leider weiß ich dann nicht, wie ich weiter machen soll...
könnt ihr mir da helfen?
jasocul - Mi 18.05.05 16:22
Das Edit nimmst du zur Eingabe des Strings?
Beim Button willst du das prüfen?
Falls das so ist, kannst du einfach beim ButtonClick-Ereignis den Inhalt des Edit.Text in eine Stringvariable schreiben.
Diese kannst du dann wie ein Array durchlaufen. Allerdings fängst du bei 1 (eins) and und hörst bei Length(StringVariable) auf.
Je nachdem, was für ein Zeichen du dann hast, erhöhst du einen deiner Zähler (vokale, konsonanten, zahl).
Od3on - Mi 18.05.05 16:27
jo, ist so wie du es sagst, aber warum fang ich bei eins an, und wie lass ich es "wie ein Arry durchlaufen"?
F34r0fTh3D4rk - Mi 18.05.05 16:29
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| function IsVokal(Buchstabe: String): boolean; const vokale: array [1..5] of string = ('a', 'e', 'i', 'o', 'u'); var i: integer; begin result := false; for i := 1 to high(vokale) do if lowercase(Buchstabe[1]) = vokale[i] then result := true; end;
function IsKonsonant(Buchstabe: String): boolean; const konsonanten: array [1..21] of string = ('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'); var i: integer; begin result := false; for i := 1 to high(konsonanten) do if lowercase(Buchstabe[1]) = konsonanten[i] then result := true; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var str: string; i, konsonanten, vokale: integer; begin str := edit1.text; for i := 1 to length(str) do begin if iskonsonant(str[i]) then inc(konsonanten); if isvokal(str[i]) then inc(vokale); end; end; |
jasocul - Mi 18.05.05 16:31
Strings kann man wie ein Array behandeln. Im Grunde sind diese wie ein Array of Char.
Aus traditionellen Gründen (bei Pascal steht/stand im Byte 0 die Länge des Strings) und zur Kompatibilität wird bei Strings nicht bei Null angefangen, sondern bei eins.
Ein Beispiel von F34r0fTh3D4rk siehst du ja. Auch wenn ich es anders machen würde. Aber das ist hier nicht das Thema.
Od3on - Mi 18.05.05 16:36
und wie würdest du es so machen?? :roll:
F34r0fTh3D4rk - Mi 18.05.05 16:37
so wie ich oben ?
konsonanten ist dann die anzahl der konsonanten und vokale, die anzahl der vokale :D
Od3on - Mi 18.05.05 16:42
echt??
hätte ich nicht gedacht :wink:
könnte man noch was anderes nehmen, wo man den text einfügt?
crakos - Mi 18.05.05 16:53
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TForm1.Button1Click(Sender: TObject); var i:integer; EditFeld:string; Zahlen:integer; reinText:string; Vokale:integer; Konsonanten:integer;
begin Zahlen:=0; Vokale:=0; EditFeld:=edit1.Text; for i:=1 to length(EditFeld) do if (ord(EditFeld[i])<=90) and (ord(EditFeld[i])>=65) or (ord(EditFeld[i])<=122) and (ord(EditFeld[i])>=97) or (ord(EditFeld[i])<=57) and (ord(EditFeld[i])>=48) then reinText:=reinText+EditFeld[i]; reinText:=uppercase(reinText); for i:=1 to length(reinText) do if (ord(reinText[i])>=48) and (ord(reinText[i])<=57) then Zahlen:=Zahlen+1; for i:=1 to length(reinText) do if (reinText[i] in ['A','E','I','O','U']) then Vokale:=Vokale+1; if Zahlen+Vokale < length(reinText) then Konsonanten:=length(reinText)-Zahlen-Vokale; label3.caption:='Zahlen: '+IntToStr(Zahlen)+' Vokale: '+IntToStr(Vokale)+' Konsonaten: '+IntToStr(Konsonanten); end; |
crakos - Mi 18.05.05 16:54
oh man, dachte hätte alles umsonst geschrieben, nur weil tele ging ^^
jasocul - Mi 18.05.05 16:55
Od3on hat folgendes geschrieben: |
und wie würdest du es so machen?? :roll: |
etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); var vstr: string; i, konsonanten, vokale, deutscheSZ, zahlen, sonstige: integer; begin vokale := 0; konsonanten := 0; zahlen := 0; sonstige := 0; deutscheSZ := 0; vstr :=AnsiLowerCase(edit1.text); for i := 1 to length(vstr) do begin case vstr[i] of 'a','e','i','o','u' : inc(vokale); 'b'..'d','f'..'h','j'..'n','p'..'t','v'..'z' : inc(konsonanten); 'ä','ö','ü','ß' : inc(deutscheSZ); '0'..'9' : inc(zahlen); else inc(sonstige); end; end; end; |
ist aber nicht durchgeprüft.
crakos - Mi 18.05.05 17:09
Was bewirkt AnsiLowerCase() und was inc() ? jetzt plz net auf suche verweisen, einfach sagen.
F34r0fTh3D4rk - Mi 18.05.05 17:13
lowercase macht alle buchstaben klein und inc erhöht einen integer um eins (oder um was anderes, kann man auch mit anderen parametern aufrufen)
also sowas wie x := x + 1; nur kürzer :wink:
crakos - Mi 18.05.05 18:03
das lowercase die buchstaben klein macht, hatte ich mir schon gedacht, von uppercase
aber was bedeutet das Ansi ?
ach und danke ;)
F34r0fTh3D4rk - Mi 18.05.05 18:05
dass es für die ansi zeichentabelle gilt und nicht für die ascii denke ich mal :roll:
Ich habe den Befehl noch nie benutzt, wie wäre es mit F1 ?
jasocul - Mi 18.05.05 18:06
Einfach gesagt, werden dann auch lokale Spracheinstellungen berücksichtigt. Ohne ANSI werden die sprachlichen Sonderzeichen (bei uns die Umlaute und ß) nicht berücksichtigt.
F34r0fTh3D4rk - Mi 18.05.05 18:07
Die Delphi Hilfe hat folgendes geschrieben: |
AnsiLowerCase gibt einen String zurück, der eine in Kleinbuchstaben konvertierte Kopie des angegebenen String-Wertes ist. Bei der Konvertierung wird das aktuelle Gebietsschema berücksichtigt. Diese Funktion unterstützt Multibyte-Zeichensätze (MBCS).
|
crakos - Mi 18.05.05 18:14
AH warum hab ich nur VOHER nix davon gehört. Naja nun weiss ichs auch ^^ werde es in den nächsten programmen einplanen :> thx (hab die sonder umlaute immer getrennt behandel)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!