如何改进 strspn 实现

How to improve strspn implementation

size_t my_strspn(const char *string, const char *chars)
{
    size_t n;
    const char *p;
    for (n = 0; *string; string++, n++)
    {
        for (p = chars; *p && *p != *string; p++);
        if (!*p)
            break;
    }

    return n;
}

有没有简单的方法删除"break"?我尝试修改 for 循环,但它们进行了一次额外的迭代。

我是这个论坛的新手,无法添加评论,而且我太忙(即懒惰)无法对此进行测试,所以...

在第一个 for 循环中添加 *p 检查怎么样?:

for (n = 0; *string && *p; string++, n++)

通过将外部 for 循环替换为 while 循环,并添加 *p == *string 检查,在内部 for 循环之后将计数器加一,问题得到了解决。