Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl der Zeichen im String (ohne Leerzeichen) zählen. (https://www.delphipraxis.net/119779-anzahl-der-zeichen-im-string-ohne-leerzeichen-zaehlen.html)

thiagojonas 31. Aug 2008 18:14


Anzahl der Zeichen im String (ohne Leerzeichen) zählen.
 
Hallo Leute, ich habe jetzt als schriftliches Prüfungsfach Informatik.

Thema ist es mit den Datentyp String zu arbeiten.

Hier die Aufgabe:
Gesucht ist ein Programm, dass die Anzahl der Zeichen(außer Leerzeichen) in einem Memofeld zählt.

Meine Frage ist, wie ich das mit den Leerzeichen berücksichtigen kann?
Hier mein Code, so wie es funktioniert, nur halt mit Leerzeichen.

Delphi-Quellcode:
procedure TForm1.check_btn(Sender: TObject);
   var ck:string;
   var i:integer;
begin
ck := Memo1.Text;
i:= Length(ck);
Panel1.Caption := IntToStr(i);
end;
[edit=Matze]Titel geändert. MfG, Matze[/edit]

mkinzler 31. Aug 2008 18:16

Re: Datentyp String
 
Leerzeichen zählen (Pos/PosEx) und von Gesamtanzahl abziehen

Benedikt 31. Aug 2008 18:18

Re: Datentyp String
 
Hi,

Alternativ, wenn evtl. auch weniger performanent als die Lösung von mkinzler, einfach den ganzen String/Memo-Inhalt durchgehen und bei allem was nicht Leerzeichen ist selbst hochzählen.

MfG Benedikt

Klaus01 31. Aug 2008 18:19

Re: Datentyp String
 
Guten Abend,

ein Weg ist mit StringReplace die Leerzeichen durch kein Zeichen zu ersetzen und dann die
Länge des Textes zu ermitteln.

Ein anderer Weg ist, die Zeichen des Textes zu überprüfen.
Wenn ein Zeichen kein Leerzeichen ist dann einen Zähler erhöhen.

Grüße
Klaus

himitsu 31. Aug 2008 18:20

Re: Datentyp String
 
den Memoinhalt in eine Stringgvariable (S) kopieren,
in 'ner For-Schleife alles von Zeichen[1] bis Zeichen[Length(S)] durchgehen und auf in einer weiteren Variable mitzählen oft es vorkommt, daß ein Zeichen kein Leerzeichen ist (S[i] <> ' ')

Meflin 31. Aug 2008 18:21

Re: Datentyp String
 
Oder aber 4. Möglichkeit:
Delphi-Quellcode:
Length(StringReplace(Memo1.Text, ' ','', [rfReplaceAll]));
Edit: öha, die is mitlerweile ja auch schon erwähnt ;)

himitsu 31. Aug 2008 18:38

Re: Datentyp String
 
da fehlt noch ein Length(Memo.Text)- :zwinker:
(ist zwar ein einfacher Weg, aber dafür auch mit einer der Langsamsten)


:dp: Ach ja, würdest du bitte dem Thema(ersten Post) einen schöneren und vorallem aussagekräftigeren Namen verpassen?

grenzgaenger 31. Aug 2008 18:39

Re: Datentyp String
 
Zitat:

Zitat von himitsu
den Memoinhalt in eine Stringgvariable (S) kopieren,
in 'ner For-Schleife alles von Zeichen[1] bis Zeichen[Length(S)] durchgehen und auf in einer weiteren Variable mitzählen oft es vorkommt, daß ein Zeichen kein Leerzeichen ist (S[i] <> ' ')

5. möglichkeit...

man nehme das for schleifchen ... und zähle die leerzeichen ... und ziehe die von der länge des strings ab ... ;-)

mkinzler 31. Aug 2008 18:41

Re: Datentyp String
 
Zitat:

man nehme das for schleifchen ... und zähle die leerzeichen ... und ziehe die von der länge des strings ab ... Wink
Da wäre aber ein gezieltes Suchen (PosEx) besser

thiagojonas 31. Aug 2008 20:09

Re: Datentyp String
 
Also, echt Leute. Vielen Dank für Eure Hilfe und für Eure wirkclich SCHNELLE Antworten. :-D
Funktioniert Super!!!

thiagojonas 31. Aug 2008 20:37

Re: Datentyp String
 
Habe da mal noch zwei kleine Frage. Wie kann ich Vokale in der Memo zählen lassen?

2.Wie kann ich mehrere Sachen replacen, also z.B. alle Vokabeln.

Delphi-Quellcode:
Length(StringReplace(ck, ' ','', [rfReplaceAll]));

Luckie 31. Aug 2008 20:38

Re: Datentyp String
 
Wobei ich mir ziemlich sicher bin, dass der Lehrer bestimmt nicht die Möglichkeiten mit StringRepalce und Length haben wollte.


Zitat:

Zitat von thiagojonas
Habe da mal noch zwei kleine Frage. Wie kann ich Vokale in der Memo zählen lassen?

In dem du in der for-Schleife nicht auf das leerzeichen prüfst, sondern auf die Vokale.

Noch ein Indiz, dass der Lehrer wohl die for-Schleife mit dem überprüfen jede einzelnen Zeichens haben wollte. Lernziel sind wohl Schleifen und if-Abfragen. Erst war es nur eine einfache Abfrage -- nur Leerzeichen -- jetzt geht es wohl darum Bedingungen mit logischen Operatoren zu verknüpfen.

mkinzler 31. Aug 2008 20:38

Re: Datentyp String
 
In diesem Fall wäre eine Schleife eine gute Lösung
Oder mehrere geschachtelte StringReplace

thiagojonas 31. Aug 2008 21:05

Re: Datentyp String
 
Tut mir leid, ich weiß leider nicht wie ich in diesem Fall mit Length eine For Schleife bilden soll :?:
Kann mir jemand einen Ansatz geben, damit ich mir selber erklären kann?
Danke

TonyR 31. Aug 2008 21:13

Re: Datentyp String
 
Na die Schleife lässt du von 1 bis Length(memo.text) laufen und als If-Abfrage in jeden Schleifendurchlauf nimmst du etwas ala
Delphi-Quellcode:
if 'a' in ['a','e','i','o','u'] then showmessage('moin');
Edit: Und ich hoffe, dass du weißt, wie man auf einzelne Zeichen eines Strings zugreift!?
Delphi-Quellcode:
einText[1]

mkinzler 31. Aug 2008 21:15

Re: Datentyp String
 
Delphi-Quellcode:
For i := 1 to Length( str) do
    if UpperCase(str[i]) in ['A', 'E', 'I', 'O', 'U'] then inc( Vokale);

Hador 3. Sep 2008 15:48

Re: Datentyp String
 
Nur mal der Vollständigkeit halber die Methode mit PosEx:

Delphi-Quellcode:
procedure TextLength(txt: String; ignore: Char);
var
  count, pos: Integer;
begin
  pos := 0;
  count := -1;
  repeat
    pos := PosEx(ignore, txt, Succ(pos));
    Inc(count);
  until pos = 0;
  ShowMessage(IntToStr(Length(txt)) + ' Zeichen - '
              + IntToStr(count) + ' "' + ignore + '" = '
              + IntToStr(Length(txt) - count) + ' Zeichen');
end;
EDIT: Das kommt davon, das man mehrere Tage irgendwelche Tabs offen lässt. Dank Browsercache steht da dann immer noch "heute" beim letzten Beitrag :wall:

DeddyH 3. Sep 2008 15:56

Re: Datentyp String
 
Aber bitte nicht pos nennen :zwinker:

heytheredelilah 3. Sep 2008 17:40

Re: Datentyp String
 
ist dad der stil von eurem informatiklehrer?
Zitat:

procedure TForm1.check_btn(Sender: TObject);
var ck:string;
var i:integer;
dann ist das aber ein VERDAMMT schlechter lehrer!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.

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