![]() |
Re: strings um ein bestimmtes zeichen vermindern
Moin Moin, ein Wettbewerb? Dann möcht ich auch eine Routine zum besten geben 8)
Delphi-Quellcode:
//Edit: SetLength nach Hinweis Sakura angepasst.FUNCTION TrimDublicateSpaces(aString: string): string; VAR i, j: integer; BEGIN SetLength(Result, length(aString)); j := 0; FOR i := 1 TO length(aString) DO IF aString[i] <> ' ' THEN BEGIN Inc(j); Result[j] := aString[i]; END ELSE IF (j = 0) or (Result[j] <> aString[i]) THEN BEGIN Inc(j); Result[j] := aString[i]; END; SetLength(Result, j); END; |
Re: strings um ein bestimmtes zeichen vermindern
Zitat:
...:cat:... |
Re: strings um ein bestimmtes zeichen vermindern
Moin Moin Sakura,
das SetLength wurde nun in der Routine angepasst. Jetzt sollte die Routine i.O. sein und hoffentlich keine grosse Performancebremse. |
Re: strings um ein bestimmtes zeichen vermindern
Zitat:
Jetzt meine Idee (ungetestet, sollte evtl. einen Tick schneller sein).
Delphi-Quellcode:
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 ;)
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; ...:cat:... |
Re: strings um ein bestimmtes zeichen vermindern
Moin Moin Sakura,
hast Recht, habe auch noch das Const angefügt und das brachte 1,47% Geschwindigkeitsvorteil, Deine Routine ist dagegen noch einmal um 3,71% schneller. Das bringt also schon einiges die Werte zwischenzuspeichern, das hätte ich gar nicht gedacht. |
Re: strings um ein bestimmtes zeichen vermindern
Zitat:
...:cat:... |
Re: strings um ein bestimmtes zeichen vermindern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz