Delphi-PRAXiS
Seite 16 von 16   « Erste     6141516   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl eines Zeichens im String ermitteln (https://www.delphipraxis.net/116372-anzahl-eines-zeichens-im-string-ermitteln.html)

KodeZwerg 16. Jul 2018 20:47

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;

himitsu 17. Jul 2018 09:40

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 16:15 Uhr.
Seite 16 von 16   « Erste     6141516   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz