一直都有这样的需求:
要将列表中的元素按照名称进行排序,顺序大概是:数字-》字母-》中文,中文则要按照汉语拼音来排序。
之前的程序一直在非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 函数的结果作为第一个参数来传递。
本文详细介绍了如何在非Unicode环境下使用C++中的sort函数结合strcmp进行字符串排序,以及如何在Unicode环境下利用lstrcmp函数实现更复杂的排序需求。重点在于解释了微软提供的lstrcmp函数如何通过调用CompareString函数来处理Unicode字符,以及其参数LCID在语言ID设定中的作用。
1419

被折叠的 条评论
为什么被折叠?



