您的位置:首页 > 其它

一天一个CRT函数 _memicmp

2009-12-24 16:02 387 查看
已经有两天没有发表这个系列了,我都快被失眠折磨疯了!连续两晚都是凌晨5点才睡着~

今天来看看_memicmp吧,很少使用的家伙!

5._memicmp

1: /****


2: Purpose:


3:     比较两缓冲区指定区间的字符,在比较前会转换为小写(忽略大小写)


4:


5: Entry:


6:        T *pBuffer1, *pBuffer2 - 所要比较的两缓冲区


7:        unsigned int uCnt - 缓冲区大小


8:


9: Exit:


10:        returns <0    if pBuffer1 <    pBuffer2


11:        returns 0    if pBuffer1 ==    pBuffer2


12:        returns >0    if pBuffer1 >    pBuffer2


13:


14: Exceptions:


15:


16: **/


17:


18: template<typename T>


19: inline int tMemICmp(T *pBuffer1, T *pBuffer2, unsigned int uCnt)


20: {


21:     if( uCnt == 0 )


22:         return 0;


23:


24:     while(--uCnt && ToLower(*pBuffer1++) == ToLower(*pBuffer2++) )


25:         ;


26:


27:     return (ToLower(*pBuffer1) - ToLower(*pBuffer2));


28: }


注:ToLower是我自己的转小写函数,同crt的tolower。

那和strcmp有什么关系呢?strcmp是专门针对字符串的函数,需要判断字符串’/0’终止符,而_memicmp是根据缓冲区大小来进行判断的。



测试:

1: int result = 0;


2: volatile tChar first[] = _T("Those Who Will Not Learn from History");


3: volatile tChar second[] = _T("THOSE WHO WILL NOT LEARN FROM their mistakes");


4: 


5: volatile const DWORD dwCount = 1000000;


6:


7: DWORD dwLast = 0;


8:{


9:     CCYPerformance timer(dwLast);


10:     for(DWORD i = 0; i < dwCount; ++i)


11:     {


12:         result = CY_CRT::tMemICmp( first, second, sizeof(first) / sizeof(first[0]) );


13:    }


14: }


15:cout << dwLast << endl;


16:


17: dwLast = 0;


18: {


19:     CCYPerformance timer(dwLast);


20:     for(DWORD i = 0; i < dwCount; ++i)


21:     {


22:          result = _memicmp( (const void *)first, (const void *)second, sizeof(first) / sizeof(first[0]) );


23:   }


24: }


25: cout << dwLast << endl;


结果肯定是_memicmp胜利!相差不大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: