Zitat von
Pseudemys Nelsoni:
Zitat:
statt immer s[i] und result[len] zu machen könntest du auch einen Pointer (PChar) verwenden, der immer erhöht wird.[/delphi]
das interessiert mich ^^, hast du ein beispiel dafür? ich arbeite kaum mit pchars
Kein Beispiel sondern deine Funktion direkt umgeschrieben:
Delphi-Quellcode:
function fmtstr(const s: string; const c: char): string;
var
i, len : integer;
ResLen : Integer;
b : boolean;
Start : Integer;
resPtr : PChar;
sPtr : PChar;
endsPtr : Pchar;
begin
if s <> '' then
begin
b := false;
Len:=Length(s);
setlength(result, len);
Start:=1;
sPtr:=Addr(s[1]);
resPtr:=Addr(result[1]);
endsPtr:=Addr(s[length(s)]);
while (sPtr^=c) and (sPtr<endsPtr) do
begin
inc(Start);
inc(sPtr);
end;
ResLen:=0;
for i := Start to Len do
begin
if (sPtr^ <> c) or (not b) then
begin
resPtr^ := sPtr^;
inc(resPtr);
inc(ResLen);
end;
b:=sPtr^=c;
inc(sPtr);
end;
if (resPtr-1)^ = c then
setlength(result, reslen-1)
else
setlength(result, reslen);
end;
end;
Sieht zwar Länger aus, denke aber, dass es so schneller ist, da die ganzen Indexzugriffe entfallen. Ist natürlich bissle kryptisch, wenn Fragen sind, dann frag.