strspn()函数和strcspn()函数

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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值