1. CompareString

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

  1. int CompareString(
  2. __in LCID Locale,
  3. __in DWORD dwCmpFlags,
  4. __in LPCTSTR lpString1,
  5. __in int cchCount1,
  6. __in LPCTSTR lpString2,
  7. __in int cchCount2
  8. );

要注意的是,要获取字符串的长度时,如果使用_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”的声明

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

  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. int main(int argc,char* argv[])
  6. {
  7. TCHAR str1[]=TEXT("aaabbbaabbaaaabbbb");//小写
  8. int cchCount1=_countof(str1);
  9. TCHAR str2[]=TEXT("AAABBBAABBAAAABBBB");//大写
  10. int cchCount2=_countof(str2);
  11. TCHAR str3[]=TEXT("AAA,BBB,AA,BB,AAAA,BBBB");//有符号
  12. int cchCount3=_countof(str3);
  13. TCHAR str4[]=TEXT("AAA,BBB.AA,BB,AAAA,BBBB");//有符号,有一个“,”变为“.”
  14. int cchCount4=_countof(str3);
  15. TCHAR str5[]=TEXT("AAA,BBB,,AA,BB,AAAA,BBBB");//有符号,将一个“,”写成“,,”
  16. int cchCount5=_countof(str3);
  17.  
  18. LCID Locale=GetThreadLocale();
  19.  
  20. //比较时忽略大小写
  21. int nVal=CompareString(Locale,NORM_IGNORECASE,str1,cchCount1,str2,cchCount2)-2;//忽略大小写时,视为相等
  22. printf_s("%d\n",nVal);
  23.  
  24. //比较时忽略符号
  25. nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str2,cchCount2,str3,cchCount3)-2;//忽略符号时,视为相等
  26. printf_s("%d\n",nVal);
  27.  
  28. //比较时忽略符号
  29. nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str4,cchCount4)-2;//忽略符号时,如果符号不相同,视为相等
  30. printf_s("%d\n",nVal);
  31.  
  32. //比较时忽略符号
  33. nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str5,cchCount5)-2;//忽略符号时,并不忽略符号的数量
  34. printf_s("%d\n",nVal);
  35.  
  36. _getch();
  37.  
  38. return 0;
  39. }

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

2. CompareStringOrdinal

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

只支持UNICODE。

  1. int CompareStringOrdinal(
  2. __in LPCWSTR lpString1,
  3. __in int cchCount1,
  4. __in LPCWSTR lpString2,
  5. __in int cchCount2,
  6. __in BOOL bIgnoreCase
  7. );

这个不写例子了。

读书笔记——Windows核心编程(2)比较字符串的更多相关文章

  1. 读书笔记——Windows核心编程(8)Interlocked单向链式栈

    SLists使用了无锁算法来保证原子同步,以提升系统性能,避免了诸如优先级挂和互锁的问题. 注意:所有的链表项必须对齐到MEMORY_ALLOCATION_ALIGNMENT.否则会出现奇葩的错误. ...

  2. 读书笔记——Windows核心编程(8)Interlocked系列函数

    先让我们来复习下小学知识 A+B=C//式中A为被加数,B为加数. A-B=C//式中A为被减数,B为减数. 再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功. -- ...

  3. 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存

    微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3  堆(大量的小型对象) 预订地址空间区域Vi ...

  4. 读书笔记——Windows核心编程(13)Windows内存体系结构

    对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间. 每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存. 这4GB其实是虚拟地址空 ...

  5. 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框

    1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...

  6. Windows核心编程第二章,字符串的表示以及宽窄字符的转换

    目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...

  7. 《Windows核心编程》读书笔记 上

    [C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...

  8. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

  9. 【转】《windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

随机推荐

  1. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  2. Spring应用——对 JDBC 的支持

    一.说明 1.Spring JDBC 对原始的 JDBC 进行了封装,使其更加易用. 2.JdbcTemplate 作为 Spring JDBC 的核心,为不同类型的 JDBC 操作提供了模板方法. ...

  3. Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

    Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...

  4. thread_Semaphore信号量

    Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制.  使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数. 一个计数信 ...

  5. LeetCode - 31. Next Permutation

    31. Next Permutation Problem's Link ---------------------------------------------------------------- ...

  6. 野比的示波器案例(Winfrom用户控件)

    使用该用户控件做的效果图,如果数据正确,可实现 波形.直线.等等效果图...... 对于本程序的认识还是不够深彻.如果有其他方法或算法,欢迎讨论下.将我所能理解的代码都再次标识了一番. ------- ...

  7. 51Node 1364--- 最大字典序排列(树状数组)

    51Node  1364--- 最大字典序排列(树状数组) 1364 最大字典序排列 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个1至N ...

  8. JavaWebSession

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  9. NoSuchMethodException <init>()

    1. Question Description: SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/n ...

  10. mybatis generator with oracle

    1.generator.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generat ...