std::wmemcmp

来自cppreference.com
< cpp‎ | string‎ | wide
在标头 <cwchar> 定义
int wmemcmp( const wchar_t* lhs, const wchar_t* rhs, std::size_t count );

比较 lhsrhs 所指向的宽字符数组的前 count 个宽字符。按字典序比较。

结果的正负号是在被比较数组中首对相异的宽字符值的差的正负号。

count 为零,则不做任何事。

参数

lhs, rhs - 指向要比较的宽字符数组的指针
count - 要检验的宽字符数

返回值

lhs 中首个相异的宽字符小于 rhs 中对应的宽字符则为负值:字典序中 lhs 先于 rhs

lhsrhs 的全部 count 个宽字符都相等则为 0

lhs 中首个相异的宽字符大于 rhs 中对应的宽字符则为正值:字典序中 rhs 先于 lhs

注解

此函数不考虑本地环境,且完全不关注其所检验的 wchar_t 对象的值:空字符和非法宽字符亦会被比较。

示例

#include <clocale>
#include <cwchar>
#include <iostream>
#include <locale>
#include <string>
 
void demo(const wchar_t* lhs, const wchar_t* rhs, std::size_t sz)
{
    std::wcout << std::wstring(lhs, sz) << " 在字典序中\n";
    int rc = std::wmemcmp(lhs, rhs, sz);
    if(rc == 0)
        std::wcout << "比较等于 ";
    else if(rc < 0)
        std::wcout << "前驱于 ";
    else if(rc > 0)
        std::wcout << "后继于 ";
    std::wcout << std::wstring(rhs, sz);
}
 
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);
}

可能的输出:

αβγ 在字典序中前驱于 αβδ
αβδ 在字典序中后继于 αβγ
αβγ 在字典序中比较等于 αβγ

参阅

比较两个宽字符串
(函数)
比较两个缓冲区
(函数)
比较来自两个宽字符串的一定量宽字符
(函数)