Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
...Vorkommen eines Buchstabens in einem String zählen
spacer
Autor Nachricht
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 11245
Erhaltene Danke: 64
Dabei seit: 22.10.2003
Wohnort: Erde (Milch- straße) ;-), ok, ok: Berlin

(XP), Vista Business, W7 (Chrome, Op10, IE8)
D2006 Pro, Java (Eclipse), C++, C# (VS 2008 Prof), Lazarus
BeitragVerfasst: Mo 04.05.09 22:17  Antworten mit Zitat Beitrag melden
Diese kleine Funktion zählt die Anzahl der Vorkommen des Buchstabens aChar in aString. Dies funktioniert sowohl mit Delphi 2007 und früher und 1-Byte-Chars als auch mit Delphi 2009 und Unicode-Chars mit 2 Byte.
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function CountCharOccurrences(const aChar: Char; const aString: String): Integer;
asm
// Wenn edx 0 ist, abbrechen und 0 zurückgeben
or edx, edx
jnz @@ValidString
xor eax, eax
ret
@@ValidString:

// Register sichern
push edi

// in al ist bereits aChar drin, fehlt für scasb noch der zu scannende
// String in edi
mov edi, edx
mov ecx, dword ptr [edx - $04]

xor edx, edx // Zähler auf 0

@@repeat:
inc edx
{$ifdef UNICODE}
repne scasw
{$else}
repne scasb
{$endif}
jz @@repeat

// Ergebnis zurückgeben
dec edx
mov eax, edx

// Register wiederherstellen
pop edi
end;
Aufruf z.B.:
ausblenden Delphi-Quelltext markieren
1:
CountCharOccurrences('e', 'Ein kleiner Test');
Das würde dann 3 ergeben.

// EDIT:
Änderungsvorschläge von user profile iconBenBE eingebracht.


Zuletzt bearbeitet von jaenicke am Di 05.05.09 13:18, insgesamt 2-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 571
Dabei seit: 17.09.2008
Wohnort: Schleswig-Holstein, nahe Bad Bramstedt

WIN XP/2000&7Prof (Familie:Win 95,Win 98)
BeitragVerfasst: Di 05.05.09 11:33  Antworten mit Zitat Beitrag melden
Also ich hätte es ja auf die herkömmliche Art gemacht, also so wie es auch in Thema 91942 im 2. Post gemacht wurde.
- Oder geht es so schneller?

Und wie kann man das erste (also das große E) auf Deine Art auch schon gleich mitzählen?
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

(Threadstarter)

Beiträge: 11245
Erhaltene Danke: 64
Dabei seit: 22.10.2003
Wohnort: Erde (Milch- straße) ;-), ok, ok: Berlin

(XP), Vista Business, W7 (Chrome, Op10, IE8)
D2006 Pro, Java (Eclipse), C++, C# (VS 2008 Prof), Lazarus
BeitragVerfasst: Di 05.05.09 12:34  Antworten mit Zitat Beitrag melden
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
- Oder geht es so schneller?
Je länger der durchsuchte String ist, desto deutlicher wird der Geschwindigkeitsvorteil. Dafür kann man nur einzelne Buchstaben suchen. ;-)

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Und wie kann man das erste (also das große E) auf Deine Art auch schon gleich mitzählen?
Den zweiten Parameter mit dem Text mit LowerCase behandeln vor der Übergabe.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home