Das Problem ist, dass Wörte nicht zwingenderweise nur durch ein bestimmtes Zeichen getrennt sein müssen:
'Das ist eine Frage.Aber was ist die Antwort?Die Antwort ist:Nein.'
Wie viele Wörter sind das, wenn man ein leerzeichen als Trenner nimmt? Und wie viele sind es, wenn man nich die Satzzeichen dazu nimmt?
Deswegen:
Delphi-Quellcode:
type
TWordDelimiter = set of Char;
var
WordDelimiter: TWordDelimiter = [#1..#64, #91..#96, #123..#127];
procedure Foo(const s: String; sl: TStrings);
var
p: PChar;
Start: PChar;
dummy: String;
begin
p := PChar(s);
while p^ <> #0 do
begin
if p^ in WordDelimiter then
Inc(p)
else
begin
Start := p;
while not ((p^ in WordDelimiter) or (p^ = #0)) do
Inc(p);
SetString(dummy, Start, p - Start);
sl.Add(dummy);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
MYTEXT = 'Once upon a midnight dreary, while I pondered, weak and weary';
begin
Foo(MYTEXT, Listbox1.Items);
end;