![]() |
AW: Anzahl eines Zeichens im String ermitteln
Hab noch etwas gebastelt aber ist auch nicht sehr effektiv.
Delphi-Quellcode:
// versuche 4 compares pro loop abzufertigen
function TCharInString.MultiCountChar(const s: string; const c: Char): Integer; var i, ii, iii, iiii: Integer; begin Result := 0; ii := Length(s); iii := (ii div 2); iiii := iii+1; for i := 1 to (Length(s) div 2) do begin if s[i] = c then Inc(Result, 1); // suche vom Anfang in Richtung Mitte if s[ii] = c then Inc(Result, 1); // suche vom Ende in Richtung Mitte if s[iii] = c then Inc(Result, 1); // suche von Mitte in Richtung Anfang if s[iiii] = c then Inc(Result, 1); // suche von Mitte in Richtung Ende Dec(ii); Dec(iii); Inc(iiii); if i = iii then Break; end; end; |
AW: Anzahl eines Zeichens im String ermitteln
Sinnlos auf unnötig viele Vaiablen zugreifen und im Speicher kreuzundquer? Da kann dann nichtmal ein ordentliches Pageging/Caching gut arbeiten.
Eventuell werden Chars doppelt, dreifach oder gar vierfach gezählt und anstatt die Schleife gleich im richtigen Bereich laufen zu lassen noch eine zusätzliche Abbruchprüfung. Eine Schleife mit nur einer Zähler- und Ende-Variable und zugriff auf nur eine Page nach der Anderen, anstatt kreuzundquer. Oder, 4 oder 8 zusammenhängende und ausgerichtete (align) Bytes in ein Register (lokale temporäre Variable innerhalb der Schleife) einlesen und direkt im Register prüfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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-2025 by Thomas Breitkreuz