[PR]

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

戻る

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


//*********************************************************
// strchri()
//   文字列 から 文字 を検索する。
//   最初 に現れた文字への ポインタ を返す。
//   文字が見つからない場合は null を返す。
//   文字列終端文字 '\0' も検索対象となる。
//   半角英字 の 大文字と小文字 を区別しない。
//
// const char *string
//   検索対象となる文字列
//
// int c
//   文字列から検索する文字
//
//*********************************************************
char * // 文字へのポインタ
strchri
	(
		const char *string, // 検索対象文字列
		      int   c       // 検索文字
	)
{
	// 検索文字を見つけるまでポインタを進める
	c = tolower( (unsigned char)c );
	const char *p = string;
	while( c != tolower( (unsigned char)*p ) )
	{
		if ( '\0' == *p )
			return null;

		++p;
	}

	return (char *)p;
}//strchri

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

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

	// 検索文字を見つけるまでポインタを進める
	c = tolower( (unsigned char)c );
	const char *p = string;
	while( c != tolower( (unsigned char)*p ) )
	{
		if ( '\0' == *p )
			return null;

		if ( --n <= 0 )
			return null;

		++p;
	}

	return (char *)p;
}//strnchri

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

関連

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



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

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

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
『新妻LOVELY×CATION』を応援しています!