strspn関数とstrcspn関数

K&R本 付録B3

size_t strspn(cs,ct)

ctに入っている文字よりなるcsの接頭辞の長さを返す

size_t strcspn(cs,ct)

ctにない文字よりなるcsの接頭辞の長さを返す

なんかよく意味がわからないので実際に使ってみる。

#include <stdio.h>
#include <string.h>

int main (void) {
    printf("%d\n",strspn("foobar","foo"));
    printf("%d\n",strspn("bar","foo"));
    
    printf("%d\n",strcspn("foobar","foo"));
    printf("%d\n",strcspn("bar","foo"));
    return 0;
}
$ main
3
0
0
3

ふーむ。先頭の文字とマッチしたらその文字数を返すだけ?

でもこれ、用途がわからん。使い道あるんだろうか・・・。

と、思ってググってみたら完全に誤読。俺ほんと誤読多いなぁ。

【実行結果例2】
文字群を入力しなさい。gfedcba
abcdefgabcdefghijにgfedcbaが含まれる長さは14です。

14文字分含まれる

strspn

第二引数の文字列の一つ一つのどれかが、第一引数の先頭から順番に含まれている間をカウントするものなのね。

printf("%d\n",strspn("aacbdi","abc"));

上記の場合、aかbかcが第一引数の先頭から数えてaacbまで含まれているので4と表示されるわけ。


・・・まあどっちにしても用途がわからないね。