字符串比较

本文介绍了两种字符串比较方法:CompareString和CompareStringOrdinal。CompareString适用于基于语言习惯的比较,而CompareStringOrdinal则更适合编程字符串的比较。文章详细解释了这两种函数的参数及返回值,并提供了示例代码。

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

1、CompareString(    _In_ LCID Locale,
    _In_ DWORD dwCmpFlags,
    _In_NLS_string_(cchCount1) PCNZWCH lpString1,
    _In_ int cchCount1,
    _In_NLS_string_(cchCount2) PCNZWCH lpString2,
    _In_ int cchCount2

    );

这个函数对两个字符串进行比较。CompareString的第一个参数指定一个区域设置ID(locale ID, LCID),这是一个32位值,用来标识一种语言。CompareString使用这个LCID来比较两个字符串,具体做法是检查字符在一种语言中的含义。以符合当地语言习惯的方式来比较,得到的结果对最终用户来说更有意义。不过,这种比较要比基于序数的比较(ordinal comparison)慢。可以调用Windows函数GetThreadLocale来得到主调线程的LCID:
LCID GetThreadLocale();


CompareString的第二个参数是一组标志,这些标志用于修改函数在比较字符串时采用的方法NORM_IGNORECASE
LINGUISTIC_IGNORECASE
忽略大小写
NORM_IGNOREKANATYPE
不区分平假名和片假名字符
NORM_IGNORENONSPACE
LINGUISTIC_IGNOREDIACRITIC
忽略non-spacing字符(译者注:non-spacing字符通常是一些读音符号)
NORM_IGNORESYMBOLS
忽略符号
NORM_IGNOREWIDTH
不区分同一个字符的单字节和双字节形式
SORT_STRINGSORT
标点符号当成符号来处理
CompareString


2、CompareStringOrdinal(为了比较编程类的字符串(如路径名、注册表项/值、XML元素/属性等等),应该使用这

例:

    LCID id = GetThreadLocale();
    const TCHAR* coma = _T("测试good");
    const TCHAR* comb = _T("测试good");

    int nRet = CompareString(id, NORM_IGNORECASE, coma, -1, comb, -1);

    int nRet1 = CompareStringOrdinal(coma, -1, comb, -1, TRUE);


CompareString和CompareStringOrdinal函数的返回值有别于C运行库的*cmp字符串比较函数的返回值。CompareString(Ordinal)返回0表明函数调用失败,返回CSTR_LESS_THAN(定义为1)表明pString1小于pString2,返回CSTR_EQUAL(定义为2)表明pString1等于pString2,返回CSTR_GREATER_THAN(定义为3)表明pString1大于pString2。为方便起见,如果函数成功,你可以从返回值中减去2,使结果值与C运行库函数的结果值(-1,0和+1)保持一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值