cperformancecharacter

Most Efficient Way To Count How Many Times A Character Occurs within a String


I am writing a very simple function that counts how many times a certain character occurs within a given string. I have a working function but was wondering if there was a more efficient or preferred method of doing this.

Here is the function:

size_t strchroc(const char *str, const char ch)
{ 
    int c = 0, i = 0;

    while(str[i]) if(str[i++] == ch) c++;
    return c;
}

I personally cannot think of any way to get this code more efficient. And was wondering (just for the sake of learning) if anybody knew of a way to make this function more efficient.

(efficient in the sense of speed and using minimal resources).


Solution

  • You can use the pointer to iterate the string, and with a little effort use the * only once per character:

    size_t strchroc(const char *str, const char ch)
    { 
        size_t c = 0;
        char n;
        while ((n=*str++), ((n==ch)? ++c : 0), n)
            ;
        return c;
    }
    

    Not that the compiler couldn't optimize yours to exactly the same code, but just for fun.