Einzelnen Beitrag anzeigen

Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Doppelte Zeichen löschen

  Alt 10. Mai 2005, 16:03
Moin,

Nehmen wir mal an ich habe folgenden String:

Zitat:
...blah...blubb..irgendwas..
und ich möchte eine Funktion schreiben, die doppelte "." löscht und die aussen auch...wie könnte ich das _schnellst_möglich machen?

Also das es nachher so aussieht:

Zitat:
blah.blubb.irgendwas
Ich hatte es schon so:

Delphi-Quellcode:
function FmtTok(const S: string; const C: Char): string;
var
  B: Boolean;
  I: Integer;
  ResLen: Integer;
begin
  Result := '';
  if S <> 'then
  begin
    B := True;
    for I := 1 to Length(S) do
    begin
      if (S[I] <> C) or ((S[I] = C) and (not B)) then
        Result := Result + S[I];
      B := S[I] = C;
    end;
    ResLen := Length(Result);
    if Result[ResLen] = C then
      SetLength(Result, ResLen-1);
  end;
end;
Das funktioniert auch, aber ich möchte es optimieren. Das "Result := Result + S[I];" dürfte wohl den langsamsten Teil ausmachen... Wie könnte ich das ganzen nun mit PChars hinkriegen?

Ich habs so versucht (*g*):

Delphi-Quellcode:
function FmtTok(const S: string; const C: Char): string;
var
  SPtr, ResPtr: PChar;
  SI: Integer;
  B: Boolean;
begin
  SetLength(Result, Length(S));
  if S <> 'then
  begin
    SPtr := @S[1];
    ResPtr := @Result[1];
    SI := 1;
    B := True;
    while SPtr <> #0 do
    begin
      if (SPtr^ <> C) or ((SPtr^ = C) and (not B)) then
      begin
        ResPtr := SPtr;
        Inc(ResPtr);
      end;
      B := SPtr^ = C;
      Inc(SI);
      Inc(SPtr);
    end;
    if ResPtr^ = C then
      SetLength(Result, Length(Result)-1)
    else SetLength(Result, Length(Result));
  end;
end;
Nicht schimpfen! Das ist erst mein erster Versuch mit PChars zu arbeiten! *g*

Naja der Code(letzterer) funktioniert nicht, gibt ewig Exceptions... jemand ne Idee was verkehrt ist? =[
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat