[PR]

『新妻LOVELY×CATION』を応援しています!

大文字と小文字を区別しない文字列検索

戻る

 大文字と小文字を区別せずに、文字列から特定の文字列を検索する関数を作る。

//*********************************************************
// strstri()
//   文字列 から 文字列 を検索する。
//   最初 に現れた文字列の先頭を指す ポインタ を返す。
//   文字列が見つからない場合は null を返す。
//   pattern が 空文字列 の場合は常に string を返す。
//   文字列終端文字 '\0' は検索対象とならない。
//   半角英字 の 大文字と小文字 を区別しない。
//
// const char *string
//   検索対象となる文字列
//
// const char *pattern
//   文字列から検索する文字列
//
//*********************************************************
char * // 文字列へのポインタ
strstri
	(
		const char *string, // 検索対象文字列
		const char *pattern // 検索する文字列
	)
{
	// pattern が空文字列の場合は string を返す。
	if ( '\0' == pattern[ 0 ] )
		return (char *)string;

	// 最初に現れた pattern へのポインタを返す。
	const size_t length = strlen( pattern );
	{for( const char *p = string;
		null != (p = strchri( p, pattern[ 0 ] ));
		++p )
	{
		if ( 0 == strncmpi( p, pattern, length ) )
			return (char *)p;
	}}

	// pattern が見つからない場合は null を返す。
	return null;
}//strstri

//*********************************************************
// strrstri()
//   文字列 から 文字列 を検索する。
//   最後 に現れた文字列の先頭を指す ポインタ を返す。
//   文字列が見つからない場合は null を返す。
//   pattern が 空文字列 の場合は常に 文字列終端 を返す。
//   文字列終端文字 '\0' は検索対象とならない。
//   半角英字 の 大文字と小文字 を区別しない。
//
// const char *string
//   検索対象となる文字列
//
// const char *pattern
//   文字列から検索する文字列
//
//*********************************************************
char * // 文字列へのポインタ
strrstri
	(
		const char *string, // 検索対象文字列
		const char *pattern // 検索する文字列
	)
{
	// 文字列終端に達するまで検索を繰り返す。
	const char *last = null;
	{for( const char *p = string;
		null != (p = strstri( p, pattern ));
		++p )
	{
		last = p;
		if ( '\0' == *p )
			return (char *)last;
	}}
	return (char *)last;
}//strrstri

//*********************************************************
// strnstri()
//   文字列 から 文字列 を検索する。
//   最初 に現れた文字列の先頭を指す ポインタ を返す。
//   文字列が見つからない場合は null を返す。
//   検索バイト数が 0 の場合は常に null を返す。
//   pattern が 空文字列 の場合は常に string を返す。
//   文字列先頭から count バイト目までを検索する。
//   文字列終端文字 '\0' は検索対象とならない。
//   半角英字 の 大文字と小文字 を区別しない。
//
// const char *string
//   検索対象となる文字列
//
// const char *pattern
//   文字列から検索する文字列
//
// int count
//   検索する最大バイト数
//
//*********************************************************
char * // 文字列へのポインタ
strnstri
	(
		const char *string,  // 検索対象文字列
		const char *pattern, // 検索文字列
		      int   count    // 最大検索バイト数
	)
{
	// 検索バイト数 0 では検索は常に失敗する。
	if ( count <= 0 )
		return null;

	// pattern が空文字列の場合は string を返す。
	if ( '\0' == pattern[ 0 ] )
		return (char *)string;

	// 最初に現れた pattern へのポインタを返す。
	const int length = strlen( pattern );
	{for( const char *p = string;
		null != (p = strnchri( p, pattern[ 0 ], count - (p - string) ));
		++p )
	{
		if ( count - (p - string) < length )
			return null;
		if ( 0 == strncmpi( p, pattern, length ) )
			return (char *)p;
	}}

	// pattern が見つからない場合は null を返す。
	return null;
}//strnstri

//*********************************************************
// strnrstri()
//   文字列 から 文字列 を検索する。
//   最後 に現れた文字列の先頭を指す ポインタ を返す。
//   文字列が見つからない場合は null を返す。
//   検索バイト数が 0 の場合は常に null を返す。
//   pattern が 空文字列 の場合は常に 文字列終端 を返す。
//   文字列先頭から count バイト目までを検索する。
//   文字列終端文字 '\0' は検索対象とならない。
//   半角英字 の 大文字と小文字 を区別しない。
//
// const char *string
//   検索対象となる文字列
//
// const char *pattern
//   文字列から検索する文字列
//
// int count
//   検索する最大バイト数
//
//*********************************************************
char * // 文字列へのポインタ
strnrstri
	(
		const char *string,  // 検索対象文字列
		const char *pattern, // 検索文字列
		      int   count    // 最大検索バイト数
	)
{
	// 検索バイト数 0 では検索は常に失敗する。
	if ( count <= 0 )
		return null;

	// 文字列終端に達するまで検索を繰り返す。
	const char *last = null;
	{for( const char *p = string;
		null != (p = strnstri( p, pattern, count - (p - string) ));
		++p )
	{
		last = p;
		if ( '\0' == *p )
			return (char *)last;
	}}
	return (char *)last;
}//strnrstri

関連

文字列末尾からの文字列検索
大文字と小文字を区別しない文字検索
大文字と小文字を区別しない文字列比較



Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
>> Amazon.co.jp 『たまゆら童子』 へ
>> 楽天ブックス 『たまゆら童子』 へ