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? =[