目前可以认为最高效的方式是调用: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") );
可以参考下面内容
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指针。