Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#14

Re: strings um ein bestimmtes zeichen vermindern

  Alt 9. Jan 2009, 14:38
Zitat von WInfo:
das SetLength wurde nun in der Routine angepasst. Jetzt sollte die Routine i.O. sein und hoffentlich keine grosse Performancebremse.


Jetzt meine Idee (ungetestet, sollte evtl. einen Tick schneller sein).
Delphi-Quellcode:
function RemoveDoubles(const str: string; const ch: Char = #32): string;
var
  I, Cnt, Len: Integer;
  CurrChar: Char;
  LastWasChar: Boolean;
begin
  Len := Length(str);
  SetLength(Result, Len);
  Cnt := 0;
  LastWasChar := False;
  for I := 1 to Len do
  begin
    CurrChar := str[I];
    if CurrChar <> ch then
    begin
      Inc(Cnt);
      Result[Cnt] := CurrChar;
      LastWasChar := False;
      continue;
    end;
    if LastWasChar then
      continue;
    Inc(Cnt);
    Result[Cnt] := CurrChar;
    LastWasChar := True;
  end;
  SetLength(Result, Cnt);
end;
Wichtig ist die CONST Deklaration für den eingehenden String, das spart ein try..finally-Block des Compilers. Des Weiteren sparen wir uns einige Array-Rechnungen durch das Cachen des aktuell zu verarbeitenden Zeichens, als auch durch das Lesen/Setzen eines Flags für den Vergleich des letzten kopierten Zeichens. Soweit mal meine Theorie. Testen kann wer anders

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat