Namespaces
Variants

std:: strcoll

From cppreference.net
定義先ヘッダ <cstring>
int strcoll ( const char * lhs, const char * rhs ) ;

現在のロケール( LC_COLLATE カテゴリで定義)に従って2つのヌル終端バイト文字列を比較します。

目次

パラメータ

lhs, rhs - 比較するヌル終端バイト文字列へのポインタ

戻り値

  • lhs rhs より 小さい (先行する)場合、負の値
  • 0 lhs rhs 等しい 場合)
  • lhs rhs より 大きい (後続する)場合、正の値

注記

照合順序は辞書順です:文字の国語アルファベット内での位置(その 等価クラス )は、大文字小文字や異体字よりも優先されます。等価クラス内では、小文字は対応する大文字よりも前に照合され、アクセント記号付きの文字にはロケール固有の順序が適用される場合があります。一部のロケールでは、文字のグループが単一の 照合単位 として比較されます。例えば、 "ch" はチェコ語では "h" の後、 "i" の前に位置し、 "dzs" はハンガリー語では "dz" の後、 "g" の前に位置します。

#include <clocale>
#include <cstring>
#include <iostream>
int main()
{
    std::setlocale(LC_COLLATE, "cs_CZ.utf8");
    // Alternatively, ISO-8859-2 (a.k.a. Latin-2)
    // may also work on some OS:
    // std::setlocale(LC_COLLATE, "cs_CZ.iso88592");
    const char* s1 = "hrnec";
    const char* s2 = "chrt";
    std::cout << "In the Czech locale: ";
    if (std::strcoll(s1, s2) < 0)
        std::cout << s1 << " before " << s2 << '\n';
    else
        std::cout << s2 << " before " << s1 << '\n';
    std::cout << "In lexicographical comparison: ";
    if (std::strcmp(s1, s2) < 0)
        std::cout << s1 << " before " << s2 << '\n';
    else
        std::cout << s2 << " before " << s1 << '\n';
}

出力:

In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec

関連項目

現在のロケールに従って2つのワイド文字列を比較する
(関数)
[virtual]
このファセットの照合規則を使用して2つの文字列を比較する
( std::collate<CharT> の仮想保護メンバー関数)
文字列を変換して、 strcmp strcoll と同じ結果を生成するようにする
(関数)