Anzahl von Zeichen in String bestimmen
-
Hallo,
gibt es eine Funktion, die mir die Anzahl bestimmter Zeichen innerhalb eines Strings aufführt?
Gruß
Gerd
-
strlen
-
Sowas wie: Wie oft kommt 'n' in "Don't panic" vor? Meines Wissens nicht, aber es ist nicht wirklich schwer, sie selbst zu schreiben.
PS: strlen ist es nicht.
-
knivil schrieb:
Sowas wie: Wie oft kommt 'n' in "Don't panic" vor? Meines Wissens nicht, aber es ist nicht wirklich schwer, sie selbst zu schreiben.
PS: strlen ist es nicht.
genau sowas meinte...
Gruß
Gerdus
-
Ja, sorry, falsch gelesen...
EDIT: Sowas in der Richtung sollte passen:
int CountChars(const char *str,int len,char chr) { int count=0; for(int i=0;i<len;i++) { if(str[i]==chr) { count++; } } return count; }
-
_matze schrieb:
Ja, sorry, falsch gelesen...
EDIT: Sowas in der Richtung sollte passen:
int CountChars(const char *str,int len,char chr) { int count=0; for(int i=0;i<len;i++) { if(str[i]==chr) { count++; } } return count; }
Vielen Dank für das kleine Prog
Gruß
Gerdus
-
_matze schrieb:
int CountChars(const char *str,int len,char chr) { int count=0; for(int i=0;i<len;i++) { if(str[i]==chr) { count++; } } return count; }
Mit nullterminierten Strings is' schoener:
int CountChars(const char *str, char chr) { int count=0; if (str) { while (*str) { if(*str==chr) count++; str++; } } return count; }
-
hellihjb schrieb:
Mit nullterminierten Strings is' schoener:
mit library-funktion isses noch schöner:
int CountChars (char *s, int c) { int n; for (n=-1; s>1; s=strchr(s,c)+1) n++; return n; }
-
int CountChars(const char *s, char c) { int res = 0; while(*s) if(*s++ == c) res++; return res; }
-
+fricky schrieb:
mit library-funktion isses noch schöner:
int CountChars (char *s, int c) { int n; for (n=-1; s>1; s=strchr(s,c)+1) n++; return n; }
Ih!
Guckst Du, so "schön" kann C sein:
int CountChars (char *s, char c) { int n = 0; while(*s) if ( *s++ == c ) n++; return n; } int main() { printf("%d\n", CountChars("Brausebrummer!", 'm')); }
-
Oh, der war schneller, der Sack!
-
Mr. C schrieb:
Guckst Du, so "schön" kann C sein:
ich sehe keinen grossen unterschied zu dem code von hellihjb. und meiner gibt beim nullpointer sogar 'nen fehlercode zurück (dafür isser wahrscheinlich etwas langsamer, aber egal).
-
man sollte so eine wichtige funktion sehr schnell machen, aber sorry ich bin kein assembler experte aber vllt kann es noch getuned werden!!?
int CountChars(const char *s, char c) { int __eax; __asm { xor eax, eax mov ebx, s mov dl, c loop0r: cmp [ebx], dl jne lol0r inc eax lol0r: inc ebx cmp [ebx], 0 jnz loop0r mov __eax, eax } return __eax; }
-
lam0r schrieb:
loop0r: cmp [ebx], dl jne lol0r inc eax lol0r: inc ebx cmp [ebx], 0 jnz loop0r
Das ist quasi identisch mit dem was der Microsoft-Compiler erzeugt.
Zugegeben, er denkt er sich nicht so "coole" Labels aus.
-
lam0r schrieb:
aber sorry ich bin kein assembler experte...
offensichtlich. du kannst asm nicht von C unterscheiden, hier ist doch das C forum.
-
int CountChars(const char *s, char c) { int res = 0; for(; s*; res+= (int)(*s++ == c); return res; }
^^
-
Oh ja, Unleserlichkeitswettbewerbe. Die lieb ich und trag meinen Teil bei^^
#include <stdio.h> int countChars(const char * str, char c) { return *str ? ( *str == c ? 1 + countChars(str + 1 , c) : 0 + countChars(str+1,c)) : 0; } int main(int argc, char* argv[]) { char x[]="don't Panic"; printf("%i", countChars(x,'o')); return 0; }
Grüße,