CompareString功能将使用由给定标识符指定的区域设置作为比较的基础来比较两个字符串。
int CompareString(
LCID 【语言环境】, | //确定地方 |
DWORD 【dwCmpFlags】, | //比较样式选项 |
LPCTSTR 【lpString1】, | //指向第一个字符串的指针 |
INT 【cchCount1】, | //第一个字符串的大小(以字节或字符为单位) |
LPCTSTR 【lpString2】, | //指向第二个字符串的指针 |
INT 【cchCount2】 | //第二个字符串的大小(以字节或字符为单位) |
); |
参数
【语言环境】
指定用于比较的区域设置。此参数可以是以下预定义的区域设置标识符之一:
值 | 含义 |
LOCALE_SYSTEM_DEFAULT | 系统的默认语言环境。 |
LOCALE_USER_DEFAULT | 当前用户的默认语言环境。 |
此参数也可以是由MAKELCID宏创建的区域设置标识符。
【dwCmpFlags】
一组标志,表示该函数如何比较两个字符串。默认情况下,这些标志未设置。此参数可以指定零以获取默认行为,也可以是以下值的任意组合:
值 | 含义 |
NORM_IGNORECASE | 忽略病例。 |
NORM_IGNOREKANATYPE | 不要区分平假名和片假名人物。相应的平假名和片假名字符相等。 |
NORM_IGNORENONSPACE | 忽略非放置字符。 |
NORM_IGNORESYMBOLS | 忽略符号。 |
NORM_IGNOREWIDTH | 不要区分单字节字符和与双字节字符相同的字符。 |
SORT_STRINGSORT | 将标点符号与符号相同。 |
【lpString1】
指向要比较的第一个字符串。
【cchCount1】
指定【lpString1】参数指向的字符串的大小(ANSI版本)或字符(Unicode版本)。如果此参数为-1,则假定该字符串为空终止,并自动计算长度。
【lpString2】
指向要比较的第二个字符串。
【cchCount2】
指定【lpString2】参数指向的字符串的大小(以字节为单位(ANSI版本)或字符(Unicode版本))。如果此参数为-1,则假定该字符串为空终止,并自动计算长度。
返回值
如果函数成功,则返回值为以下值之一:
值 | 含义 |
1 | 【lpString1】参数指向的字符串的字词值低于【lpString2】参数指向的字符串。 |
2 | 【lpString1】指向的字符串与【lpString2】指向的字符串的词法值相等。 |
3 | 【lpString1】指向的字符串的词法值比【lpString2】指向的字符串更大。 |
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.GetLastError可能会返回以下错误代码之一:
ERROR_INVALID_FLAGS |
ERROR_INVALID_PARAMETER |
备注
请注意,如果返回值为2,则两个字符串在排序规则中为“相等”,尽管不一定相同。
为了保持比较字符串的C运行时约定,可以从非零返回值中减去值2。然后< 【0, ==0 and >】 0的含义与C运行时间一致。
如果两个字符串的长度不同,则将其与最短长度进行比较。如果它们等于该点,则返回值将指示较长的字符串较大。有关区域设置标识符的详细信息,请参阅区域标识符.
通常,使用所谓的“单词排序”技术比较字符串。在一个字排序中,所有标点符号和其他非字母数字字符(连字符和撇号除外)都位于任何字母数字字符之前。连字符和撇号的处理方式与其他非字母数字符号不同,以确保诸如“coop”和“co-op”之类的词语保持在排序列表中。
如果指定了SORT_STRINGSORT标志,则使用所谓的“字符串排序”技术比较字符串。在字符串排序中,连字符和撇号被视为与其他非字母数字符号一样:它们位于字母数字符号之前。
下表显示了两种方式排列的单词列表:
词排序 | 字符串排序 | 词排序 | 字符串排序 | |
钢坯en | 法案 | T-蚂蚁 | T-蚂蚁 | |
票据 | 钢坯en | 蔡健雅 | T-ARIA | |
法案 | 票据 | T-ARIA | 蔡健雅 | |
不能 | 不能 | 起诉 | 苏的 | |
斜面 | 不能 | 起诉 | 起诉 | |
不能 | 斜面 | 苏的 | 起诉 | |
同 | 合作社 | 去 | 我们 | |
鸡舍 | 同 | 是 | 去 | |
合作社 | 鸡舍 | 我们 | 是 |
LSTRCMP和LSTRCMPI功能使用单词排序。CompareString和LCMapString函数默认使用单词排序,但如果调用者设置了SORT_STRINGSORT标志,则使用字符串排序。
当【dwCmpFlags】设置为0或NORM_IGNORECASE,【cchCount1】和【cchCount2】的值为-1时,CompareString功能被优化为以最高速度运行。
在比较期间,CompareString功能忽略阿拉伯语Kashidas。因此,如果两个字符串相同,则存储Kashidas,CompareString返回值为2;字符串在归类意义上被认为是“相等的”,尽管它们不一定相同。
也可以看看
FoldString, GetSystemDefaultLCID, GetUserDefaultLCID, LCMapString, LSTRCMP, LSTRCMPI, MAKELCID