Namespaces
Variants

wmemcmp

From cppreference.net
< c ‎ | string ‎ | wide
ヘッダーで定義 <wchar.h>
int wmemcmp ( const wchar_t * lhs, const wchar_t * rhs, size_t count ) ;
(C95以降)

lhs および rhs が指すワイド文字(または互換性のある整数型)配列の先頭 count 文字を比較します。比較は辞書順で行われます。

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

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

目次

パラメータ

lhs, rhs - 比較するワイド文字配列へのポインタ
count - 検査するワイド文字の数

戻り値

最初に異なるワイド文字の値が lhs において rhs の対応するワイド文字の値より小さい場合、負の値: lhs rhs より辞書順で前に来ることを示す。

0 lhs rhs の全てのワイド文字が等しい場合。

最初に異なるワイド文字の値が lhs の方が rhs の対応するワイド文字の値より大きい場合、正の値: rhs lhs より辞書順で前に来ることを示します。

注記

この関数はロケールに依存せず、検査対象の wchar_t オブジェクトの値に注意を払いません:ヌル文字および無効なワイド文字も同様に比較されます。

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
void demo(const wchar_t* lhs, const wchar_t* rhs, size_t sz)
{
    for (size_t n = 0; n < sz; ++n)
        putwchar(lhs[n]);
    int rc = wmemcmp(lhs, rhs, sz);
    if (rc == 0)
        wprintf(L" compares equal to ");
    else if(rc < 0)
        wprintf(L" precedes ");
    else if(rc > 0)
        wprintf(L" follows ");
    for (size_t n = 0; n < sz; ++n)
        putwchar(rhs[n]);
    wprintf(L" in lexicographical order\n");
}
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    wchar_t a1[] = {L'α',L'β',L'γ'};
    wchar_t a2[] = {L'α',L'β',L'δ'};
    size_t sz = sizeof a1 / sizeof *a1;
    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

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.29.4.4.5 wmemcmp関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.29.4.4.5 wmemcmp関数 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.29.4.4.5 wmemcmp関数 (p: 435)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.24.4.4.5 wmemcmp関数 (p: 381)

関連項目

(C95)
2つのワイド文字列を比較する
(関数)
2つのバッファを比較する
(関数)
(C95)
2つのワイド文字列から指定された文字数を比較する
(関数)