Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 964
Lance Kidwell Avatar asked Dec 16 '08 17:12

Lance Kidwell


2 Answers

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.

like image 60
Bill Karwin Avatar answered Oct 06 '22 00:10

Bill Karwin


It's based on the the ANSI C function strspn(). It can be useful in low-level C parsing code, where there is no high-level string class. It's considerably less useful in PHP, which has lots of useful string parsing functions.

like image 26
Adam Rosenfield Avatar answered Oct 06 '22 00:10

Adam Rosenfield