strcoll 関数

strcoll 関数と各 wcscoll 関数は、現在使用されているロケールのコード ページの LC_COLLATE カテゴリ設定に基づいて 2 つの文字列を比較します。 各 _mbscoll 関数は、現在使用されているマルチバイトのコード ページに基づいて、2 つの文字列を比較します。 現在の coll コード ページで文字セットの順序と辞書文字の順序に違いがある場合に、比較に関心がある場合は、文字列比較に関数を使用します。 対応する cmp 関数は、文字列が等しいかをテストする目的でのみ使用します。

strcoll 系関数

SBCS (SBCS) Unicode MBCS (MBCS) 説明
strcoll wcscoll _mbscoll 2 つの文字列を照合する
_stricoll _wcsicoll _mbsicoll 2 つの文字列を照合する (大文字と小文字を区別しない)
_strncoll _wcsncoll _mbsncoll 2 つの文字列の先頭の count 文字を照合する
_strnicoll _wcsnicoll _mbsnicoll 2 つの文字列の先頭の count 文字を照合する (大文字と小文字を区別しない)

解説

これらの関数の 1 バイト文字 (SBCS) バージョン (strcollstricoll_strncoll_strnicoll) は、現在のロケールの LC_COLLATE カテゴリ設定に基づいて string1string2 を比較します。 これらの関数は、対応する strcmp 関数 (その中の strcoll 関数が照合順序を提供するロケール コード ページ情報を使用する) とは異なります。 文字セット順序と辞書式文字順序が異なるロケールでの文字列比較では、対応する strcmp 関数ではなく strcoll 関数を使用する必要があります。 LC_COLLATE の詳細については、「setlocale」を参照してください。

一部のコード ページとそれに対応する文字セットでは、文字セットの文字の順序が辞書式の文字の順序と異なる場合があります。 "C" ロケールでは、大文字と小文字は区別されません。ASCII 文字セット内の文字の順序は、文字の辞書の順序と同じです。 しかし、たとえば、ヨーロッパの一部のコード ページでは、文字 a (値 0x61) は文字セットで文字 'ä' (値 0xE4) の前にありますが、辞書式の順序では文字 'ä' が文字 'a' の前にあります。 このようなインスタンスで、辞書式比較を実行するには、strcmp ではなく strcoll を使用します。 あるいは、元の文字列に対して strxfrm を使用してから、結果の文字列に対して strcmp を使用できます。

strcollstricoll_strncoll_strnicoll では、ワイド文字 (Unicode) の対応関数と同様に、現在使用中のロケールのコード ページに従ってマルチバイト文字の文字列を自動的に処理します。 ただし、これらの関数のマルチバイト (MBCS) バージョンでは、現在使用中のマルチバイトのコード ページに基づいて文字ごとに文字列を照合します。

coll 関数が単に文字列の等価性をテストするのに対して、cmp 関数は比較のために文字列を辞書式に照合するため、coll 関数は cmp の対応するバージョンよりもかなり低速です。 したがって、現在の coll コード ページで文字セットの順序と辞書文字の順序に違いがあり、この違いが文字列比較に重要な場合にのみ、関数を使用する必要があります。

関連項目

ロケール
文字列操作
localeconv
_mbsnbcoll, _mbsnbcoll_l, _mbsnbicoll, _mbsnbicoll_l
setlocale, _wsetlocale
strcmp, wcscmp, _mbscmp
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l