读书笔记——Windows核心编程(2)比较字符串
2013-11-21 18:20
288 查看
1. CompareString
以符合用户语言习惯的方式,EX版本使用UNICODE
要注意的是,要获取字符串的长度时,如果使用_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”的声明
一个简单的例子(仅涉及大小写和符号)
在这个例子中,忽略符号这个我做了多个比较。代码运行结果为四个0。
2. CompareStringOrdinal
比较程序内部使用的字符串(如路径名、注册表项/值、XML元素/属性等),是码位比较,不考虑区域设置,速度快。
只支持UNICODE。
这个不写例子了。
以符合用户语言习惯的方式,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 );
这个不写例子了。
相关文章推荐
- 读书笔记——Windows核心编程(2)比较字符串
- 《Windows核心编程》读书笔记二 字符和字符串处理
- 【读书笔记】Linux Shell脚本攻略(二)读取字符,各种循环,分隔符和迭代器,比较和测试
- java IO之字节流和字符流比较
- 读书笔记第一章第四节1.4各存储引擎直接的比较
- 关于pascal中高精度字符串型数的比较
- 《windows核心编程》读书笔记——探索虚拟内存
- [MSSQL]无序字符比较函数
- 《Windows核心编程》读书笔记(五)
- 【读书笔记】windows核心编程 - 异常处理相关
- 《Windows核心编程》读书笔记十一 Windows线程池
- [C++]《Windows核心编程》读书笔记
- 比较两文件中相同的字符,并存入第三个文件
- strcmp函数只能对字符指针(变化的地址)或数组名(固定的地址)进行比较asc2码
- 《Windows核心编程》读书笔记(1)
- 《Windows核心编程》读书笔记(14) 第19章 DLL基础
- 嵌入式GUI的相关比较(minigui,qte)一月份读书笔记
- 比较java与c语言中数字转换成字符的不同
- linux shell 字符比较与数值比较,bash的调试
- 读书笔记——Windows核心编程(8)Interlocked单向链式栈