读书笔记——Windows核心编程(2)比较字符串

1. CompareString

以符合用户语言习惯的方式,EX版本使用UNICODE

int CompareString(
  __in  LCID Locale,
  __in  DWORD dwCmpFlags,
  __in  LPCTSTR lpString1,
  __in  int cchCount1,
  __in  LPCTSTR lpString2,
  __in  int cchCount2
);
要注意的是,要获取字符串的长度时,如果使用_countof宏,则宏中参数必须为数组,使用指针则会发生如下错误

1>d:\wlscode\tempcode\tempcode\mainoftempcode.cpp(12): error C2784: “char (*__countof_helper(_CountofType (&)[_SizeOfArray]))[_SizeOfArray]”: 未能从“LPCTSTR”为“_CountofType (&)[_SizeOfArray]”推导 模板 参数
1>          c:\program files\microsoft visual studio 10.0\vc\include\stdlib.h(343) : 参见“__countof_helper”的声明


一个简单的例子(仅涉及大小写和符号)

#include <Windows.h>
#include <stdio.h>
#include <conio.h>

int main(int argc,char* argv[])
{
	TCHAR str1[]=TEXT("aaabbbaabbaaaabbbb");//小写
	int cchCount1=_countof(str1);
	TCHAR str2[]=TEXT("AAABBBAABBAAAABBBB");//大写
	int cchCount2=_countof(str2);
	TCHAR str3[]=TEXT("AAA,BBB,AA,BB,AAAA,BBBB");//有符号
	int cchCount3=_countof(str3);
	TCHAR str4[]=TEXT("AAA,BBB.AA,BB,AAAA,BBBB");//有符号,有一个“,”变为“.”
	int cchCount4=_countof(str3);
	TCHAR str5[]=TEXT("AAA,BBB,,AA,BB,AAAA,BBBB");//有符号,将一个“,”写成“,,”
	int cchCount5=_countof(str3);

	LCID Locale=GetThreadLocale();

	//比较时忽略大小写
	int nVal=CompareString(Locale,NORM_IGNORECASE,str1,cchCount1,str2,cchCount2)-2;//忽略大小写时,视为相等
	printf_s("%d\n",nVal);

	//比较时忽略符号
	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str2,cchCount2,str3,cchCount3)-2;//忽略符号时,视为相等
	printf_s("%d\n",nVal);

	//比较时忽略符号
	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str4,cchCount4)-2;//忽略符号时,如果符号不相同,视为相等
	printf_s("%d\n",nVal);

	//比较时忽略符号
	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str5,cchCount5)-2;//忽略符号时,并不忽略符号的数量
	printf_s("%d\n",nVal);

	_getch();

	return 0;
}
在这个例子中,忽略符号这个我做了多个比较。代码运行结果为四个0。


2. CompareStringOrdinal

比较程序内部使用的字符串(如路径名、注册表项/值、XML元素/属性等),是码位比较,不考虑区域设置,速度快。

只支持UNICODE。

int CompareStringOrdinal(
  __in  LPCWSTR lpString1,
  __in  int cchCount1,
  __in  LPCWSTR lpString2,
  __in  int cchCount2,
  __in  BOOL bIgnoreCase
);

这个不写例子了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值