2

有谁知道 memcspn 函数的有效实现?它的行为应该类似于 strcspn,但在内存缓冲区中而不是在以空字符结尾的字符串中查找跨度。目标编译器是 visualC++ 。

谢谢,卢卡

4

2 回答 2

2

一种近乎最佳的实现:

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-30T17:44:33.740 回答
0

编写这个函数 TBH 的低效实现似乎非常困难 - 实现看起来非常简单,所以如果您在合理的时间范围内找不到实现,我建议您自己编写。

于 2010-08-30T17:06:51.173 回答