Thema: Delphi Live Stichwortsuche

Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Live Stichwortsuche

  Alt 27. Feb 2014, 09:03
Ä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)

Geändert von Sir Rufo (27. Feb 2014 um 09:14 Uhr)
  Mit Zitat antworten Zitat