Search code examples
phpfunctionbuilt-in

What's the point of strspn?


At work today we were trying to come up with any reason you would use strspn.

I searched google code to see if it's ever been implemented in a useful way and came up blank. I just can't imagine a situation in which I would really need to know the length of the first segment of a string that contains only characters from another string. Any ideas?


Solution

  • Although you link to the PHP manual, the strspn() function comes from C libraries, along with strlen(), strcpy(), strcmp(), etc.

    strspn() is a convenient alternative to picking through a string character by character, testing if the characters match one of a set of values. It's useful when writing tokenizers. The alternative to strspn() would be lots of repetitive and error-prone code like the following:

    for (p = stringbuf; *p; p++) {
      if (*p == 'a' || *p == 'b' || *p = 'c' ... || *p == 'z') {
        /* still parsing current token */
      }
    }
    

    Can you spot the error? :-)

    Of course in a language with builtin support for regular expression matching, strspn() makes little sense. But when writing a rudimentary parser for a DSL in C, it's pretty nifty.