名前空間
変種
操作

std::wmemcmp

提供: cppreference.com
< cpp‎ | string‎ | wide
ヘッダ <cwchar> で定義
int wmemcmp( const wchar_t* lhs, const wchar_t* rhs, std::size_t count );

lhs および rhs の指すワイド文字配列の先頭 count 個のワイド文字を比較します。 比較は辞書的に行われます。

結果の符号は比較する配列内の最初の異なるワイド文字の組の値の差の符号です。

count がゼロの場合、この関数は何もしません。

目次

[編集] 引数

lhs, rhs - 比較するワイド文字配列を指すポインタ
count - 調べるワイド文字数

[編集] 戻り値

lhs 内の最初の異なるワイド文字の値が rhs 内の対応するワイド文字の値より小さい (辞書順で lhsrhs より前に来る) 場合は負の値。

lhsrhscount 個のワイド文字がすべて等しい場合は 0

lhs 内の最初の異なるワイド文字の値が rhs 内の対応するワイド文字の値より大きい (辞書順で rhslhs より前に来る) 場合は正の値。

[編集] ノート

この関数はロケール対応でなく、コピーする wchar_t オブジェクトの値を気にしません。 ヌルも無効な文字も比較します。

[編集]

#include <iostream>
#include <string>
#include <cwchar>
#include <locale>
#include <clocale>
 
void demo(const wchar_t* lhs, const wchar_t* rhs, std::size_t sz)
{
    std::wcout << std::wstring(lhs, sz);
    int rc = std::wmemcmp(lhs, rhs, sz);
    if(rc == 0)
        std::wcout << " compares equal to ";
    else if(rc < 0)
        std::wcout << " precedes ";
    else if(rc > 0)
        std::wcout << " follows ";
    std::wcout << std::wstring(rhs, sz) << " in lexicographical order\n";
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
 
    wchar_t a1[] = {L'α',L'β',L'γ'};
    constexpr std::size_t sz = sizeof a1 / sizeof *a1;
    wchar_t a2[sz] = {L'α',L'β',L'δ'};
 
    demo(a1, a2, sz);
    demo(a2, a1, sz);
    demo(a1, a1, sz);
}

出力例:

αβγ precedes αβδ in lexicographical order
αβδ follows αβγ in lexicographical order
αβγ compares equal to αβγ in lexicographical order

[編集] 関連項目

2つのワイド文字列を比較します
(関数) [edit]
2つのバッファを比較します
(関数) [edit]
2つのワイド文字列の文字を一定量比較します
(関数) [edit]