![]() |
Re: Wie oft ist ein Zeichen in einem String
Zitat:
Delphi-Quellcode:
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 Offset := 1; // Ergebnis ist erst mal 0 Result := 0; // Block wiederholen bis (> 1 <) repeat // Die Position des nächsten Suchstrings merken // PosEx fängt bei der alten Position an zu suchen Offset := PosEx(SubStr, InStr, Offset); // Wenn ein Suchstring gefunden wurde (Offset ist größer 0) if Offset > 0 then begin // Ergebnis erhöhen Inc(Result); // Position um die Länge des Suchstrings erhöhen Inc(Offset, Len); end; // (> 1 <) Wenn die Aktuelle Position 0 ist (d.h. es wurde kein Suchstring mehr gefunden) steige aus der Schleife aus until Offset = 0; end; |
Re: Wie oft ist ein Zeichen in einem String
Zitat:
|
Re: Wie oft ist ein Zeichen in einem String
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:
Code:
1.) Zeichen (1000 Durchläufe): ~312 ms
2.) StrCharCount (1000 Durchläufe): ~350 ms 2.) CountChar (1000 Durchläufe): ~375 ms 3.) CountSubStr (1000 Durchläufe): ~547 ms 4.) Bla (1 Durchlauf): ~16 ms (1000 Durchläufe: ~ 16 sek) |
Re: Wie oft ist ein Zeichen in einem String
In Sachen CountSubStr gibt's och noch was in der CodeLib :angel:
> ![]() |
Re: Wie oft ist ein Zeichen in einem String
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz