Эффективный memcspn

Кто-нибудь знает об эффективной реализации функции memcspn?? Он должен вести себя как strcspn, но искать диапазон в буфере памяти, а не в строке с нулевым символом в конце. Целевым компилятором является VisualC++ .

Спасибо лука

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в зависимости от того, будет ли на вашей машине дороже арифметика или чуть больше кэш-памяти.

Казалось бы, довольно сложно написать неэффективную реализацию этой функции, TBH - реализация кажется довольно простой, поэтому я бы посоветовал написать ее самостоятельно, если вы не можете найти реализацию в разумные сроки.

Другие вопросы по тегам