· 编程思想  · 3 min read

VC++中字符串比较和查找

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

另,可参考:
常用字符串函数
1. 字符串比较函数

  //比较两个字符串是否相同
  int StrCmp(LPCTSTR lpStr1,LPCTSTR lpStr2);
  int StrCmpN(LPCTSTR lpStr1,LPCTSTR lpStr2,int nChar);
  int strcmp( const char *string1, const char *string2 );
  int wcscmp( const wchar_t *string1, const wchar_t *string2 );
  int CompareString(LCID Locale, DWORD dwCmpFlags, LPCTSTR lpString1, int cchCount1, LPCTSTR lpString2, int cchCount2);

2. 计算字符串长度
  HRESULT StringCchLength( LPCTSTR psz,size_t cchMax,size_t *pcch); //replacement for strlen
  size_t strlen( const char *string );
  size_t wcslen( const wchar_t *string );

3. 字符串赋值函数

  HRESULT StringCchCopy(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcpy
  HRESULT StringCchCopyN(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchSrc); //replacement for strncpy
  LPTSTR StrCpy(LPTSTR psz1,LPCTSTR psz2);  //存在安全问题
  LPTSTR StrCpyN(LPTSTR psz1,LPCTSTR psz2,int cchMax);  //存在安全问题
  char *strcpy( char *strDestination, const char *strSource );
  wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );
  char *strncpy( char *strDest, const char *strSource, size_t count );
  wchar_t *wcsncpy( wchar_t*strDest, const wchar_t *strSource, size_t count );

4. 字符串连接函数

  HRESULT StringCchCat( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcat
  HRESULT StringCchCatN( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchMaxAppend); //replacement for strncat
  LPTSTR StrCat( LPTSTR psz1,LPCTSTR psz2);  //存在安全问题
  LPTSTR StrNCat( LPTSTR pszFront,LPCTSTR pszBack,int cchMax);  //存在安全问题
  char *strcat( char *strDestination, const char *strSource );
  wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );
  char *strncat( char *strDest, const char *strSource, size_t count );
  wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );

5. 字符查找函数

  //查找字符串中指定字符第一次出现的位置
  LPTSTR StrChr( LPCTSTR lpStart,TCHAR wMatch); //区分大小写
  char *strchr( const char *string, int c );
  wchar_t *wcschr( const wchar_t *string, wchar_t c );
  LPTSTR StrChrI( LPCTSTR lpStart,TCHAR wMatch); //不区分大小写

  //查找字符串中指定字符最后一次出现的位置
  LPTSTR StrRChr( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //区分大小写
  char *strrchr( const char*string, int c );
  wchar *wcsrchr( const wchar_t *string, int c );
  LPTSTR StrRChrI( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //不区分大小写

  *StrRChr()函数可以通过StrChr()函数和while循环来实现。

补充:
查找字符串:
  _tcsstr(........)

字符串转化为double型数字
  _tcstod( const char *nptr,  char **endptr )

字符串转化为double型整数(只取整数部分,不取小数)Convert strings to a long-integer value.
  _tcstoul  (  const char *nptr,  char **endptr,  int base )
  _tcstol  (  const char *nptr,  char **endptr,  int base )

取子字符串
Extracts a substring of length nCount characters from this CStringT object, starting at position iFirst (zero-based).

CStringT Mid(
  int iFirst,
  int nCount
) const;
CStringT Mid(
  int iFirst
) const;

example:

//typedef CStringT < TCHAR, StrTraitATL < TCHAR > > CAtlString;

CAtlString s( _T("abcdef") );
_ASSERT( s.Mid( 2, 3 ) == _T("cde") );
Back to Blog

Related Posts

View All Posts »
React Native和Weex技术对比

React Native和Weex技术对比

React Native 和 Weex是比较流行的新一代高体验的跨平台开发框架。这个文档可以仔细分析它们之间的区别,帮助技术人员作出合适的选择。