一 、 从别人的blog引用,如下:
从字符串A中找到匹配字符串B的第一个子串的位置,以下的代码经测试比Plauger的stl(VC7)中的
::std::string::find要快30%左右
// 仿函数版本
template < class Character = char, class Size = int >
struct StringFinder
{
typedef Size size_t;
typedef Character char_t;
size_t operator()( const char_t* lpszSource, const char_t* lpszSearch )
{
// maybe the processing of the following line can delay to the caller
if ( ( NULL == lpszSource ) || ( NULL == lpszSearch ) ) return -1;
const char_t& cSource = *lpszSource;
const char_t& cSearch = *lpszSearch;
for ( ; ; )
{
if ( 0 == *lpszSearch )
{
return ( lpszSource - ( lpszSearch - &cSearch ) - &cSource );
}
if ( 0 == *lpszSource ) return -1;
if ( *lpszSource != *lpszSearch )
{
lpszSource -= lpszSearch - &cSearch - 1;
lpszSearch = &cSearch;
continue;
}
++ lpszSource;
++ lpszSearch;
}
return -1;
}
};
二、以上改成c,如下:
c++_cracker007 14:55:21
int find( const char* lpszSource, const char* lpszSearch )
{
if ( ( NULL == lpszSource ) || ( NULL == lpszSearch ) ) return -1;
const char* cSource = lpszSource;
const char* cSearch = lpszSearch;
for ( ; ; )
{
if ( 0 == *lpszSearch )
{
return ( lpszSource - ( lpszSearch - cSearch ) - cSource );
}
if ( 0 == *lpszSource ) return -1;
if ( *lpszSource != *lpszSearch )
{
lpszSource -= lpszSearch - cSearch - 1;
lpszSearch = cSearch;
continue;
}
++ lpszSource;
++ lpszSearch;
}
return -1;
}
c++_cracker007 14:55:28
这样就改成c的了。