Anzahl von Zeichen in String bestimmen



  • _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,


Anmelden zum Antworten