大文字と小文字を区別せずに、文字列から特定の文字列を検索する関数を作る。 //********************************************************* // 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 関連 |
|
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
>> Amazon.co.jp 『たまゆら童子』 へ
>> 楽天ブックス 『たまゆら童子』 へ