有人知道memcspn函数的有效实现吗?它的行为应该类似于strcspn,但在内存缓冲区中查找跨度,而不是在以null结尾的字符串中查找。目标编译器是visualC++。
谢谢,卢卡
发布于 2010-08-31 01:44:34
一个近乎最优的实现:
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,使用位数组而不是字节数组可能更好,这取决于在您的机器上是算术运算还是稍微多一点的缓存抖动更昂贵。
发布于 2010-08-31 01:06:51
这个函数的低效实现似乎相当困难,TBH --实现看起来非常简单,所以如果你不能在合理的时间范围内找到一个实现,我建议你自己写。
https://stackoverflow.com/questions/3602534
复制相似问题