Forum: Object-Pascal / Delphi-Language
Delphi
by cruiser,
26. Jan 2007
PosEx arbeitet intern auf Pointer-Basis. Ich komme mit deinem Testlauf auf meiner alten Mühle trotz 1000 Wiederholungen auf ~500 ms.
Edit: Okay... hab mich geirrt. Trotzdem ist der Code um längen schneller als der Pos+Copy-Code. Das Copy hat die meiste Zeit geschluckt, nicht das suchen an sich.
Edit2: Hab mal deinen Test übernommen, hier die Ergebnisse auf meiner Maschine:
1.) Zeichen...
Forum: Object-Pascal / Delphi-Language
Delphi
by cruiser,
25. Jan 2007
Hast du eigentlich recht... mh... ich kommentier mal meine Methode aus:
function CountSubStr(const SubStr, InStr: string): Cardinal;
var
// aktuelle Position und Länge des Suchstrings als Cardinal
Offset, Len: Cardinal;
begin
// Länge des Suchstrings vorberechnen
Len := Length(SubStr);
// Aktuelle Position auf das erste Zeichen setzen
Forum: Object-Pascal / Delphi-Language
Delphi
by cruiser,
25. Jan 2007
Und dass ich den uralten Code wirklich langsam mal optimieren muss ;)
Edit: Okay.. ich fordere ein neues Rennen :lol:
Neuer Code:
function CountSubStr(SubStr, Str: string): integer;
var
Offset: Cardinal;
l: Integer;
Forum: Object-Pascal / Delphi-Language
Delphi
by cruiser,
25. Jan 2007
Bei meiner könnt man nich das Result erhöhen mit Inc() machen... und evtl. PosEx statt Pos + Copy verwenden... ansonsten läuft die auch für Fragen wie "Wie oft ist
im Quelltext?" ;)
Forum: Object-Pascal / Delphi-Language
Delphi
by cruiser,
25. Jan 2007
function CountSubStr(SubStr, Str: string): integer;
begin
Result := 0;
while pos(SubStr, Str) > 0 do
begin
Result := Result + 1;
Str := Copy(Str, Pos(SubStr, Str) + Length(SubStr), Length(Str));
end;
end;