size_t strspn(const char *s, const char *accept)
功能: 用来计算字符串s中从头开始连续有几个字符都属于字符串accept。
函数说明: strspn() 从参数s字符串的开头计算连续的字符,而这些字符都完全是accept所值字符串中的字符。即就是说,若strspn()的返回值为n,就说明字符串s开头连续有n个字符都是属于字符串accept内的字符。
返回值:返回第一次失配前匹配的字符数
注意: 检索的字符是区分大小写的^_^
static void hash_char(const char *accept, char *ch_table)
{
while(*accept != '\0')
{
ch_table[*accept]++;
++accept;
}
}
size_t my_strspn(const char *s, const char *accept)
{
if(s == NULL || accept == NULL)
{
return 0;
}
int match_count = 0;
char ch_table[256] = {0};
hash_char(accept, ch_table);
while(*s != '\0')
{
if(ch_table[*s])
{
match_count++;
}
else
{
return match_count;
}
++s;
}
return match_count;
}
size_t strcspn(const char *s, const char *reject)
功能: 用来计算字符串s从头开始连续有几个字符都不属于字符串reject。
函数说明: strcspn()从参数s字符串的开头计算连续的字符,而这些字符都完全不在参数reject所指的字符串中。即就是说,若strcspn()返回的值为n,就说明字符串s开头连续有n个字符都不含字符串reject内的字符。
返回值: 返回字符串s开头连续不含字符串reject内的字符数目(返回第一次匹配前失配的字符数)。
static void hash_char(const char *reject, char *ch_table)
{
while(*reject != '\0')
{
ch_table[*reject]++;
++reject;
}
}
size_t strcspn(const char *s, const char *reject)
{
if(s == NULL || reject == NULL)
{
return 0;
}
char ch_table[256] = {0};
int no_match_count = 0;
hash_char(reject, ch_table);
while(*reject != '\0')
{
if(!ch_table[*reject])
{
no_match_count++;
}
else
{
return no_match_count;
}
++reject;
}
return no_match_count;
}