Einzelnen Beitrag anzeigen

Slipstream
(Gast)

n/a Beiträge
 
#5

AW: Wörter zählen

  Alt 27. Feb 2017, 11:17
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i, woerter : integer;
    text : string;
begin
woerter:= 1;
 for i := 0 to length (text) do
  begin
    inc(woerter);
    continue;
  end;
  Edit3.Text:= inttostr(woerter);
end;
Das habe ich und für wenige Wörter funktioniert das!
Length(Text) gibt die Anzahl der Buchstaben und Zeichen zurück. Die Zählung bei Strings beginnt nicht bei 0, sondern bei 1: Text[1] bezeichnet das erste Zeichen des Strings Text. In deiner Prozedure iterierst du durch die Zeichen und erhöhst bei jedem Durchlauf die Zählvariable woerter. Danach gibt deine Procedure die Anzahl der Zeichen aus, nicht die Anzahl der Wörter.

Ich würde so vorgehen: zuerst einmal legst du fest, welche Zeichen als Worttrenner gelten sollen. Das macht man am besten mit einem Set:

Delphi-Quellcode:
  private { Private-Deklarationen }
    Trenner = set of (' ', '?', ',', '.', ';', '!'); // ... und was dir sonst noch einfällt
Dann entwickelst du eine Function, die das gewünschte Ergebnis zurückliefert:

Delphi-Quellcode:
function Form1.GetWordCount(AText : String) : Integer; // "Text" sollte man nicht als Variable verwenden
var
  i,
  Zaehler,
  Laenge : Integer;

begin
  Zaehler := 0;
  i := 1;
  Laenge := Length(AText);
  while i <= Laenge do
  begin
    if AText[i] in Trenner then // ein Trennzeichen wurde gefunden
    begin
      if (i < Laenge) and (AText[i] = ' ') then // wenn i nicht das letzte Zeichen ist, wird das nächste auf Space geprüft
         inc(Zaehler);
      if i = Laenge then // wenn i das letzte Zeichen ist, wird nicht das nächste auf Space geprüft
         inc(Zaehler);
    end;

    inc(i); // nicht vergessen, den Index des Strings zu erhöhen
  end;

  Result := Zaehler;
end;
Den Beispielcode hab ich nicht getestet, sondern einfach im Foreneditor getippt. Der Code ist natürlich nicht perfekt, zB reagiert er nicht darauf, wenn am Ende des Strings gar kein Trennzeichen mehr steht.
  Mit Zitat antworten Zitat