Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#35

Re: StringReplace und doppelte Zeichen

  Alt 24. Dez 2007, 21:45
Zitat von grenzgaenger:
tja, war wohl nicht ganz so gut ... mit dem goto ...
Kommt auf die Testdaten an. Wenn die zu eliminierenden Doubletten nicht ganz vorne stehen, bringt das schon etwas.

Da hier mal wieder Pointerarithmetik schneller zu sein scheint als Indizierung eines Strings (beim FastPos-Projekt ist es grad anders herum) habe ich meine Variante mal mit Pointern implementiert. Das wird -bei mir- doppelt so schnell. Kann eigentlich nicht sein, aber es scheint zu funktionieren... Ich erzeuge einen String der Länge 10000 mit zufälligen Zeichen aus ABCD und kürze 'A' weg.

Delphi-Quellcode:
Function RemoveCharRepetitionsP(Const aText: String; aChar: Char): String;
Var
  ip, jp, ep: PChar;
  c: Char;

Begin
  setLength(Result, Length(aText));
  If Length(aText) = 0 Then Exit;
  ip := @aText[1];
  jp := @Result[1];
  c := ip^;
  ep := ip+Length (aText);

  Result[1] := c;
  inc(ip);
  while ip<ep do begin
    If (c <> aChar) Or (ip^ <> c) Then Begin
      Inc(jp);
      c := ip^;
      jp^:=c;
    End;
    inc (ip);
    End;
  SetLength(Result, jp-@Result[1]+1);
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat