如何改进 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
循环之后将计数器加一,问题得到了解决。
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
循环之后将计数器加一,问题得到了解决。