zoukankan      html  css  js  c++  java
  • 读书笔记——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 empcode empcodemainoftempcode.cpp(12): error C2784: “char (*__countof_helper(_CountofType (&)[_SizeOfArray]))[_SizeOfArray]”: 未能从“LPCTSTR”为“_CountofType (&)[_SizeOfArray]”推导 模板 参数
    1>          c:program filesmicrosoft visual studio 10.0vcincludestdlib.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
    ",nVal);
    
    	//比较时忽略符号
    	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str2,cchCount2,str3,cchCount3)-2;//忽略符号时,视为相等
    	printf_s("%d
    ",nVal);
    
    	//比较时忽略符号
    	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str4,cchCount4)-2;//忽略符号时,如果符号不相同,视为相等
    	printf_s("%d
    ",nVal);
    
    	//比较时忽略符号
    	nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str5,cchCount5)-2;//忽略符号时,并不忽略符号的数量
    	printf_s("%d
    ",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
    );

    这个不写例子了。

  • 相关阅读:
    Microsoft .NET Framework 2.0实现发送邮件(Email)总结
    Socket对像的使用
    Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
    异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
    格式化为中文数字
    [网络收集]Form表单及网站开发中常用js表单取值方法
    [网络收集]c#和asp.net方面的面试题
    [网络收集]javascript常用代码汇总
    [网络收集]VS2005调试问题和技巧
    [网络收集]图片的相对应用程序 路径 "~/"
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202164.html
Copyright © 2011-2022 走看看