Zitat von
Pseudemys Nelsoni:
result := result + s[i];
Das kostet auf Dauer sehr viel Rechenzeit, da ein neuer Speicherbereich mit einem Byte mehr reserviert wird, der alte String dort hinein kopiert und das Zeichen angehängt wird. Zusätzlich muss der alte String-Speicher freigegeben werden.
Und dieses Prozedere wird nun 1 Mio mal ausgeführt.
Besser du setzt Result vor der Schleife auf die Worst-Case Länge (in deinem Fall SetLength(Result, Length(S))). Nun kannst du die Zeichen direkt zuweisen "Inc(RealLen);Result[RealLen] := S[i];". Nach dem Schleifendurchlauf setzt du nun mit SetLength(Result, RealLen) die entgültige Länge fest.
Zitat:
Delphi-Quellcode:
if (result <> '') and (result[length(result)] = c) then
setstring(result, pchar(result), length(result)-1);
Hätte es nicht auch SetLength(Result, Length(Result) - 1) getan?
Für was brauchst du denn
b. Das wird doch gar nicht ausgewertet.