VC 中字符串比较和查找

目前可以认为最高效的方式是调用:StrChrI
因为这是API,不是CRT函数。
由于相应的DLL早已经加载到内存,所以调用起来高效。

 

  1. 另,可参考:   
  2. 常用字符串函数   
  3. 1. 字符串比较函数   
  4.   
  5.     //比较两个字符串是否相同    
  6.     int StrCmp(LPCTSTR lpStr1,LPCTSTR lpStr2);   
  7.     int StrCmpN(LPCTSTR lpStr1,LPCTSTR lpStr2,int nChar);   
  8.     int strcmp( const char *string1, const char *string2 );   
  9.     int wcscmp( const wchar_t *string1, const wchar_t *string2 );   
  10.     int CompareString(LCID Locale, DWORD dwCmpFlags, LPCTSTR lpString1, int cchCount1, LPCTSTR lpString2, int cchCount2);   
  11.   
  12. 2. 计算字符串长度   
  13.   
  14.         HRESULT StringCchLength( LPCTSTR psz,size_t cchMax,size_t *pcch); //replacement for strlen   
  15.           size_t strlen( const char *string );   
  16.           size_t wcslen( const wchar_t *string );   
  17.   
  18. 3. 字符串赋值函数   
  19.   
  20.         HRESULT StringCchCopy(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcpy   
  21.         HRESULT StringCchCopyN(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchSrc); //replacement for strncpy   
  22.         LPTSTR StrCpy(LPTSTR psz1,LPCTSTR psz2);  //存在安全问题   
  23.           LPTSTR StrCpyN(LPTSTR psz1,LPCTSTR psz2,int cchMax);  //存在安全问题   
  24.           char *strcpy( char *strDestination, const char *strSource );   
  25.           wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );   
  26.           char *strncpy( char *strDest, const char *strSource, size_t count );   
  27.           wchar_t *wcsncpy( wchar_t*strDest, const wchar_t *strSource, size_t count );   
  28.   
  29. 4. 字符串连接函数   
  30.   
  31.       HRESULT StringCchCat( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcat   
  32.         HRESULT StringCchCatN( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchMaxAppend); //replacement for strncat   
  33.       LPTSTR StrCat( LPTSTR psz1,LPCTSTR psz2);  //存在安全问题   
  34.         LPTSTR StrNCat( LPTSTR pszFront,LPCTSTR pszBack,int cchMax);  //存在安全问题   
  35.       char *strcat( char *strDestination, const char *strSource );   
  36.         wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );   
  37.         char *strncat( char *strDest, const char *strSource, size_t count );   
  38.         wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );   
  39.   
  40. 5. 字符查找函数   
  41.   
  42.         //查找字符串中指定字符第一次出现的位置    
  43.         LPTSTR StrChr( LPCTSTR lpStart,TCHAR wMatch); //区分大小写   
  44.         char *strchr( const char *string, int c );   
  45.         wchar_t *wcschr( const wchar_t *string, wchar_t c );   
  46.         LPTSTR StrChrI( LPCTSTR lpStart,TCHAR wMatch); //不区分大小写   
  47.   
  48.       //查找字符串中指定字符最后一次出现的位置    
  49.       LPTSTR StrRChr( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //区分大小写   
  50.       char *strrchr( const char*string, int c );   
  51.         wchar *wcsrchr( const wchar_t *string, int c );   
  52.         LPTSTR StrRChrI( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //不区分大小写   
  53.         
  54.       *注  StrRChr()函数可以通过StrChr()函数和while循环来实现。   
  55.   
  56. 补充:   
  57. 查找字符串:   
  58.   
  59.     _tcsstr(........)   
  60.   
  61. 字符串转化为double型数字   
  62.   
  63.     _tcstod( const char *nptr,  char **endptr )   
  64.   
  65.   
  66.   
  67. 字符串转化为double型整数(只取整数部分,不取小数)Convert strings to a long-integer value.   
  68.   
  69.     _tcstoul  (  const char *nptr,  char **endptr,  int base )   
  70.   
  71.     _tcstol  (  const char *nptr,  char **endptr,  int base )   
  72.   
  73.   
  74.   
  75. 取子字符串   
  76.   
  77. Extracts a substring of length nCount characters from this CStringT object, starting at position iFirst (zero-based).   
  78.   
  79. CStringT Mid(   
  80.   int iFirst,   
  81.   int nCount   
  82. const;   
  83. CStringT Mid(   
  84.   int iFirst   
  85. const;   
  86.   
  87. example:   
  88.   
  89. //typedef CStringT < TCHAR, StrTraitATL < TCHAR > > CAtlString;   
  90.   
  91. CAtlString s( _T("abcdef") );   
  92. _ASSERT( s.Mid( 2, 3 ) == _T("cde") );  

 

可以参考下面内容

 

http://msdn.microsoft.com/en-us/library/bb759935%28VS.85%29.aspx


C/C++字符串查找函数 

C/C++ string库(string.h)提供了几个字符串查找函数,如下:

memchr在指定内存里定位给定字符
strchr在指定字符串里定位给定字符
strcspn返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量
strrchr在字符串里定位给定字符最后一次出现的位置
strpbrk在字符串str1里定位字符串str2里任意一个首次出现的字符
strspn返回字符串str1从开始字符到第一个不在str2中的字符个数
strstr在字符串str1中定位字符串str2首次出现的位置



函数说明:

1、memchr

原型:const void * memchr ( const void * ptr, int value, size_t num);

            void * memchr ( void * ptr, int value, size_t num);

参数:ptr,待查找的内存指针;

            value,要查找的值;

            num,内存大小。

说明:在ptr指向的内存中查找value,返回指向和value首次匹配的元素指针,如果没有找到,返回NULL指针。


2、strchr

原型:const char * strchr ( const char * str, int character);

            char * strchr ( char * str, int character);

参数:str,待查找字符串指针;

            character,要查找的值。

说明:在字符串str中查找character,返回指向和character首次匹配的元素指针,如果没有找到,返回NULL指针。


3、strcspn

原型:size_t strcspn ( const char * str1, const char * str2);

参数:str1,待查找的字符串指针;

            str2,要查找的字符串指针。

说明:在str1中查找str2中的字符,返回找到str2中任意一个字符时已查找的字符个数。


4、strrchr

原型:const char * strrchr ( const char * str, int character);

            char * strrchr ( char * str, int character);

参数:str,待查找的字符串指针;

            character,要查找的值。

说明:在str中查找character,返回指向与character最后一次匹配的元素的指针,如果没有找到,返回NULL指针。


5、strpbrk

原型:const char * strpbrk (const char * str1, const char * str2);

            char * strpbrk ( char * str1, const char * str2);

参数:在str1中查找str2中任意一个字符,返回指向与首次出现的str2中的任意一个字符匹配的元素的指针,如果没有找到,返回NULL指针。


6、strspn

原型:size_t strspn ( const char * str1, const char * str2);

参数:str1,待查找的字符串指针;

            str2,要查找的字符串指针。

说明:从str1的第一个字符开始算起,直到出现一个不在str2中的字符为止,返回字符个数。


7、strstr

原型:const char * strstr ( const char * str1, cosnt char *str2);

            char * strstr ( char * str1, const char * str2);

参数:str1,待查找的字符串指针;

            str2,要查找的字符串指针。

说明:在str1中查找匹配str2的子串,并返回指向首次匹配时的第一个元素指针。如果没有找到,返回NULL指针。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值