memcspn 関数の効率的な実装を知っている人はいますか?? strcspn のように動作する必要がありますが、null で終了する文字列ではなく、メモリ バッファーでスパンを探します。ターゲット コンパイラは visualC++ です。
ありがとう、ルカ
ほぼ最適な実装の 1 つ:
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 の非効率的な実装を作成するのは非常に難しいように思われます。実装は非常に簡単に思えるので、適切な時間内に実装が見つからない場合は、これを自分で作成することをお勧めします。