关于Unicode下名称排序问题

本文详细介绍了如何在非Unicode环境下使用C++中的sort函数结合strcmp进行字符串排序,以及如何在Unicode环境下利用lstrcmp函数实现更复杂的排序需求。重点在于解释了微软提供的lstrcmp函数如何通过调用CompareString函数来处理Unicode字符,以及其参数LCID在语言ID设定中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        一直都有这样的需求:

        要将列表中的元素按照名称进行排序,顺序大概是:数字-》字母-》中文,中文则要按照汉语拼音来排序。

        之前的程序一直在非Unicode下面运行,使用stl中的sort函数结合strcmp来处理即可实现排序。后面我们的程序进行了Unicode改造,strcmp只适用于ASCII窄字节字符的处理,宽字节则无能为力了。经搜索发现,微软给我们提供了支持Unicode字符操作的lstrcmp函数,进而能实现我们的需求。

        函数strcmp是作为对Windows 函数CompareString 的调用来实现的。

        int CompareString(
            LCID lcid,
            DWORD fdwStyle,
            PCWSTR pString1,
            int cch1,
            PCTSTR pString2,
            int cch2);
        该函数对两个Unicode字符串进行比较。CompareString 的第一个参数用于设定语言ID(LCID),这是个3 2 位值,用于标识一种特定的语言。CompareString 使用这个LCID 来比较这两个字符串,方法是对照一种特定的语言来查看它们的字符的含义。这种操作方法比C 运行期函数简单地进行数值比较更有意义。当lstrcmp 函数系列中的任何一个函数调用CompareString 时,该函数便将调用Windows 的GetThreadLocale 函数的结果作为第一个参数来传递。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值