たくさんある文字列比較用関数から必要なものを見つける

C言語をやっていた頃はstrcmp(とstrncmp)だけ知っていれば文字列比較には十分だった。

しかしWindowsプログラミングになるとユニコードやらTCHAR型が登場したおかげで非常に複雑になっている。さらに同じ挙動を示す関数が名前違いで複数用意されているものだから混沌としている。

しかし関数の名前の法則(?)を押さえておけば何となく使うべき関数をチョイスできる。

・「w」がついている場合はユニコード文字列の比較
・「t」が付いている場合はTCHAR型文字列の比較
・「str」が付いている場合は通常の文字列(SHIFT-JISやANSI文字列)の比較

・「n」が付いている場合は文字数を指定しての比較
・「i」が付いている場合は大文字と小文字を区別しない比較

という命名慣習だ。

例えば「strcmp」は「str」が含まれるから通常文字列用で、「i」や「n」が含まれないから大文字と小文字を区別して文字数の指定ができない比較用となるし、「stricmp」は大文字小文字を同一視する比較用、「strncmp」は文字数を指定しての比較用となる。


実際のプログラミングでは...

通常の文字列に対応したstrcmp、strncmp(文字数指定)、stricmp(大文字小文字同一視)、_strnicmp(文字数指定かつ大文字小文字同一視)。

TCHAR型文字列に対応した_tcscmp、_tcsncmp(文字数指定)、_tcsicmp(大文字小文字同一視)、_tcsnicmp(文字数指定かつ大文字小文字同一視)。

の合計8個程度を覚えておけば問題ないだろう。


MSDNライブラリから適当にピックアップしただけで以下のものが見つかった。きちんと探せばまだまだある。いったいいくつあるのだろう?

char wchar_t TCHAR 比較長 大小同一 ロケール 対応OS 補足
_tcscmp
_tccmp
strcmp
wcscmp
_mbscmp MBCS
_tcsncmp
_tcsnccmp
strncmp
wcsncmp
_mbsnbcmp  MBCS
_mbsncmp MBCS
_tcsncmp_l MBCS
_mbsnbcml MBCS
_mbsncmp_l MBCS
_tcsicmp
_stricmp
_wcsicmp
_mbsicmp MBCS
_tcsncicmp
_strnicmp
_wcsnicmp
_mbsnicmp MBCS
_tcsnicmp
_strnicmp
_wcsnicmp
_mbsnbicmp MBCS
_tcsncicmp_l
_strnicmp_l
_wcsnicmp_l
_mbsnicmp_l MBCS
StrCmp
StrCmpA
StrCmpW
StrCmpN
StrCmpNA
StrCmpNW
StrCmpI
StrCmpIA
StrCmpIW
StrCmpNI
StrCmpNIA
StrCmpNIW
StrNCmp
StrNCmpI
StrCmpC Windows 2000以降
StrCmpCA Windows 2000以降
StrCmpCW Windows 2000以降
StrCmpNC Windows 2000以降
StrCmpNCA Windows 2000以降
StrCmpNCW Windows 2000以降
StrCmpIC Windows 2000以降
StrCmpICA Windows 2000以降
StrCmpICW Windows 2000以降
StrCmpNIC Windows 2000以降
StrCmpNICA Windows 2000以降
StrCmpNICW Windows 2000以降
StrCmpLogicalW Windows XP以降イコウ 含まれる数値を比較に考慮
strcmpi (現在は利用しない)
CompareString 可能 可能 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
CompareStringA 可能 可能 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
CompareStringW 可能 可能 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
CompareStringEx 可能 可能 Windows Vista以降 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
CompareStringOrdinal 可能 可能 Windows Vista以降 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
CompareStringWrapW 可能 可能 Windows 2000以降 戻り値に注意!等しいときはCSTR_EQUAL(=2)を返す
strcoll
wcscoll
_mbscoll MBCS
_tcsncoll
_strncoll
_wcsncoll
_mbsnbcoll MBCS
 
_tcsncoll_l
_strncoll
_wcsncoll
_mbsncoll MBCS
_strncoll_l
_wcsncoll_l
_mbsncoll_l  MBCS
_mbsnbcoll_l  MBCS
_tcsnicoll
_strnicoll
_wcsnicoll
_mbsnbicoll MBCS
_tcsnicoll_l
_strnicoll_l
_wcsnicoll_l
_mbsnbicoll_l MBCS
 
_tcsncicoll
_strnicoll
_wcsnicoll
_mbsnbicoll MBCS
_tcsnicoll
_strnicoll
_wcsnicoll
_mbsnbicoll MBCS
_tcsnicoll_l
_strnicoll_l
_wcsnicoll_l
_mbsnbicoll_l MBCS

カテゴリー「文字列操作」 のエントリー