C语言strspn和strcspn

示例

给定一个字符串,strspn计算仅由特定字符列表组成的初始子字符串的长度(跨度)。strcspn相似,不同之处在于它会计算初始子字符串的长度,该子字符串由除所列字符外的任何字符组成:

/*
  Provided a string of "tokens" 用...定界 "separators", print the tokens along
  with the token separators that get skipped.
*/
#include <stdio.h>
#include <string.h>

int main(void)
{
    const char sepchars[] = ",.;!?";
    char foo[] = ";ball call,.fall gall hall!?.,";
    char *s;
    int n;

    for (s = foo; *s != 0; /*empty*/) {
        /* Get the number of token separator characters. */
        n = (int)strspn(s, sepchars);

        if (n > 0)
            printf("skipping separators: << %.*s >> (length=%d)\n", n, s, n);

        /* Actually skip the separators now. */
        s += n;

        /* Get the number of token (non-separator) characters. */
        n = (int)strcspn(s, sepchars);

        if (n > 0)
            printf("token found: << %.*s >> (length=%d)\n", n, s, n);

        /* Skip the token now. */
        s += n;
    }

    printf("== token list exhausted ==\n");

    return 0;
}

使用宽字符字符串的类似函数是wcsspn和wcscspn;它们的使用方式相同。