C言語,strspn()関数でプレフィックスの長さを取得する

スポンサーリンク

鍛錬 759

C言語,strspn()関数でプレフィックスの長さを取得する

プレフィックス(接頭辞)について、指定した文字群が含まれる先頭からの長さを取得するには、strspn()関数を使用します。
 
以下は、strspn()関数についてです。

#include <string.h>

size_t strspn(const char *s, const char *accept);
 

引数

以下は、上記の引数についてです。

引数 意味
const char *s プレフィックスを確認する文字列
const char *accept プレフィックスを確認する際に使用する文字群。
この文字群のみで構成されるプレフィックスの長さを、
戻り値で取得する。

戻り値

以下は、戻り値についてです。

戻り値
size_t プレフィックスに存在する文字群の先頭からの長さ
 
スポンサーリンク

プログラム

以下は、プレフィックスに含まれる文字群の、先頭からの長さを取得するプログラム、test_strspn.c です。

今回は、次の条件で確認しています。文字群は、3回の確認全てにおいて同じものを使用しています。

確認に使用する文字群
ZXYCAB

 
1回目の確認

プレフィックスを確認する文字列
ABCMMMXYZ

2回目の確認

プレフィックスを確認する文字列
MMMABCXYZ

3回目の確認

プレフィックスを確認する文字列
XYZABCMMM
// include
#include <stdio.h>
#include <string.h>

// main
int main(void)
{
	char str[256] = "";
	char group[256] = "";
	int len;
	
	// 文字群を格納
	strncpy(group, "ZXYCAB", sizeof(group) - 1);
	
	// プレフィックスに含まれる文字群の先頭からの長さを取得
	// 1回目
	strncpy(str, "ABCMMMXYZ", sizeof(str) - 1);
	len = strspn(str, group);
	printf("%s を先頭から順に確認すると、\n", str);
	printf("%s の内いずれかの文字が %d 文字連続で存在する。\n", group, len);
	printf("\n");
	
	// 2回目
	strncpy(str, "MMMABCXYZ", sizeof(str) - 1);
	len = strspn(str, group);
	printf("%s を先頭から順に確認すると、\n", str);
	printf("%s の内いずれかの文字が %d 文字連続で存在する。\n", group, len);
	printf("\n");
	
	// 3回目
	strncpy(str, "XYZABCMMM", sizeof(str) - 1);
	len = strspn(str, group);
	printf("%s を先頭から順に確認すると、\n", str);
	printf("%s の内いずれかの文字が %d 文字連続で存在する。\n", group, len);
	printf("\n");
	
	return 0;
}

実行結果

以下は、プログラム test_strspn.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_strspn.c -o test_strspn
***@ubuntu:~/***/test/c$ ./test_strspn
ABCMMMXYZ を先頭から順に確認すると、
ZXYCAB の内いずれかの文字が 3 文字連続で存在する。

MMMABCXYZ を先頭から順に確認すると、
ZXYCAB の内いずれかの文字が 0 文字連続で存在する。

XYZABCMMM を先頭から順に確認すると、
ZXYCAB の内いずれかの文字が 6 文字連続で存在する。

 
上記に示した通り、プレフィックスに含まれる文字群の、先頭からの長さを取得することができました。

スポンサーリンク

シェアする

フォローする