Dann will ich mich auch mal beteiligen:
Delphi-Quellcode:
function RemoveDlbSpaces(const AStr: String): String;
var LCount,
LDstLen,
LSpCnt,
LSrcLen : Integer;
LDst,
LSrc : PChar;
begin
LDstLen := 0;
LSrcLen := Length(AStr);
SetLength(result, LSrcLen);
LSpCnt := 0;
LSrc := PChar(AStr);
LDst := PChar(result);
for LCount := 1 to LSrcLen do
begin
if LSrc^ = #32 then
inc(LSpCnt)
else
LSpCnt := 0;
if (LSpCnt < 2) then
begin
LDst^ := LSrc^;
inc(Cardinal(LDst));
inc(LDstLen);
end;
inc(Cardinal(LSrc));
end;
SetLength(result, LDstLen);
end;
Bei meinen Tests hat diese Funktion nur 2/3 der Zeit von DerDan benötigt. Ich hoffe ich hab nicht vergessen irgendwas zu berücksichtigen aber ich denke meine Funktion macht das was die anderen auch machen in einer annehmbaren Zeit.
Vielleicht liegt es aber auch an den verschiedenen Testmethoden. Denn die Methode von jbg war bei mir schneller als die von DerDan (jedoch nicht so schnell wie meine).
Es gäbe auch noch die Variante hier mit einem Var-Parameter zu arbeiten (was ja sinn macht wenn man mit dem abgewandelten String weiterarbeiten will). Dann wäre das ganze sicher noch um einiges schneller.