📄 strspn.c
字号:
/* * strspn, strcspn */#include <string.h>#include <stddef.h>#include <inttypes.h>#include <limits.h>#ifndef LONG_BIT#define LONG_BIT (CHAR_BIT*sizeof(long))#endifstatic inline voidset_bit(unsigned long *bitmap, unsigned int bit){ bitmap[bit/LONG_BIT] |= 1UL << (bit%LONG_BIT);}static inline inttest_bit(unsigned long *bitmap, unsigned int bit){ return (int)(bitmap[bit/LONG_BIT] >> (bit%LONG_BIT)) & 1;}static size_tstrxspn(const char *s, const char *map, int parity){ unsigned long matchmap[((1 << CHAR_BIT)+LONG_BIT-1)/LONG_BIT]; size_t n = 0; /* Create bitmap */ memset(matchmap, 0, sizeof matchmap); while ( *map ) set_bit(matchmap, (unsigned char) *map++); /* Make sure the null character never matches */ if ( parity ) set_bit(matchmap, 0); /* Calculate span length */ while ( test_bit(matchmap, (unsigned char) *s++)^parity ) n++; return n;}size_tstrspn(const char *s, const char *accept){ return strxspn(s, accept, 0);}size_tstrcspn(const char *s, const char *reject){ return strxspn(s, reject, 1);}char *strpbrk(const char *s, const char *accept){ const char *ss = s+strxspn(s, accept, 1); return *ss ? (char *)ss : NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -