Noch ein kleiner:
Scanne von beiden Seiten und halbiere die Loop:
Delphi-Quellcode:
function EH_CharCount4(
const S:
string; C: Char): Cardinal;
var
P, PEnd: PChar;
begin
Result := 0;
P := Pointer(S);
if P =
nil then Exit;
PEnd := P + PStrLenInt(NativeUInt(P) - SizeOf(StrLenInt))^-1;
if PEnd = p
//handle single char string
then Inc(Result, Ord(P^ = C))
else while P < PEnd
do begin
if P^ = C
then
Inc(Result);
Inc(P);
if PEnd >= P
then begin
if PEnd^ = C
then
Inc(Result);
Dec(PEnd);
end;
end;
end;
Wegen der Schwankungen empfehle ich jeden test mind 10x durchzuführen und einen avg zu bilden.