Ähnlich habe ich das auch gerade umgesetzt (nur ohne Generics):
Delphi-Quellcode:
type
TDynStringArray = array of string;
function StrToArray(const InputStr: string): TDynStringArray;
var
PLast, PCurrent: PChar;
s: string;
ArrayIndex: integer;
begin
SetLength(Result, Length(InputStr) div 2);
ArrayIndex := Low(Result);
PLast := PChar(InputStr);
PCurrent := PChar(InputStr);
while PCurrent^ <> #0 do
begin
if PCurrent^ = ' ' then
begin
SetString(s, PLast, PCurrent - PLast);
Result[ArrayIndex] := s;
inc(ArrayIndex);
PLast := CharNext(PCurrent);
end;
PCurrent := CharNext(PCurrent);
end;
SetString(s, PLast, PCurrent - PLast);
Result[ArrayIndex] := s;
SetLength(Result, ArrayIndex + 1);
end;
Das Array sollte mit
Length( InputStr ) div 2 + 1
initialisiert werden, denn
'a b'
ergibt 2 Suchworte, aber du initialisierst mit
3 div 2 = 1
und es knallt
Dafür würde bei meiner Version das letzte Wort nicht in das Array geschrieben
und du müsstest bei deiner Version nur 2 Zeilen tauschen, damit es trotzdem funktioniert.
(Ist gefixed)
Ein weiteres Problemchen ist, dass bei
'a b '
als Ergebnis
['a','b','']
geliefert wird, aber dafür gibt es ja auch die UnitTests
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)