有谁知道 memcspn 函数的有效实现?它的行为应该类似于 strcspn,但在内存缓冲区中而不是在以空字符结尾的字符串中查找跨度。目标编译器是 visualC++ 。
谢谢,卢卡
一种近乎最佳的实现:
size_t memcspan(const unsigned char *buf, size_t len, const unsigned char *set, size_t n)
{
size_t i;
char set2[1<<CHAR_BIT] = {0};
while (n--) set2[set[n]] = 1;
for (i=0; i<len && !set2[buf[i]]; i++);
return i;
}
使用位数组而不是字节数组可能会更好set2
,这取决于算术或更多缓存抖动在您的机器上是否更昂贵。
编写这个函数 TBH 的低效实现似乎非常困难 - 实现看起来非常简单,所以如果您在合理的时间范围内找不到实现,我建议您自己编写。