【原创】fast wcsnicmp 算法实现
来源:互联网 发布:睿拓香港知乎 编辑:程序博客网 时间:2024/04/19 19:55
对于做路径过滤或者文件过滤驱动的朋友来说,fast wcsnicmp函数可以获得更佳的性能,在负载重的情况下比较明显。
对比微软的wcsnicmp函数速度快一倍左右,对于学习算法优化的朋友,这也是个比较好的例子。
size_t
FastWcsnicmp (
wchar_t *First,
wchar_t *Second,
size_t Len
)
{
// Author: RickyWong
wchar_t f, s;
// L'a' - L'A' = 32 = 0x 100000, 这难道是巧合??
unsigned short mask = ~(L'a' - L'A');
// wide char专用mask,ascii版可以去掉
unsigned short wcmask = 0xFF80;
if (Len == 0)
return 0;
f = *First;
s = *Second;
do
{
// 你要知道,英文和其他字符编码的区别
if ( ((f | s) & wcmask) == 0 )
{
// ok, 如果是英文字符并且忽略大小写后不一样,那就是字符串不相等
// 那么大小写英文字符不同之处在哪里?
if ( ((f ^ s) & mask) != 0 )
break;
}
// 非英文字符直接对比
else if (f != s)
break;
// 一些小技巧...
First++;
Second++;
f = *First;
s = *Second;
}
while ( (--Len) && f );
// 返回差值,如果相等,结果为0
return (f - s);
}
相信各位也会写strnicmp了。我再厚道点吧,这里也放出测试代码:
#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
#pragma pack(8,push)
LARGE_INTEGER t1;
LARGE_INTEGER t2;
LARGE_INTEGER fr;
#pragma pack(pop)
WCHAR a0[] = L"gauibsNilubgwawJiubgw.wiuGa";
WCHAR b0[] = L"gauibsNiluBgwewJiubgw.wiuGa";
WCHAR a[] = L"ability越大,duty越重.exe";
WCHAR b[] = L"ability越大,duTy越重.exe";
WCHAR a1[] = L"能力越大,责任越重啊";
WCHAR b1[] = L"能力越大,责任越重啊";
int _tmain(int argc, _TCHAR* argv[])
{
int res = -1;
double time;
QueryPerformanceFrequency(&fr);
QueryPerformanceCounter(&t1);
for (int i=0;i<10000000;i++)
{
res = FastWcsnicmp(a,b,sizeof(a)/sizeof(a[0]));
//res = _wcsnicmp(a,b,sizeof(a)/sizeof(a[0]));
}
QueryPerformanceCounter(&t2);
t2.QuadPart = (t2.QuadPart - t1.QuadPart);
time = (double)t2.QuadPart / (double)fr.QuadPart;
printf("result:%d/t clock:%I64d /ttime:%fs/n",res,t2,time);
system("pause");
return 0;
}
- 【原创】fast wcsnicmp 算法实现
- fast-DTW算法 python实现
- A-Fast-RCNN算法的Caffe实现
- [原创]LM算法的实现
- Flashsim中关于FAST算法实现的代码解析
- [原创]TEA算法的VB实现代码
- Edmonds-Karp算法实现代码【原创】
- 【原创】TOP k算法的简单实现
- Fast Paxos算法简介
- fast算法学习
- FAST算法解析
- Fast Paxos (分布式算法)
- FAST算法实践
- Fast Paxos 分布式算法
- FAST算法小结
- fast-DTW算法
- Fast RCNN算法详解
- Fast RCNN算法详解
- Applet 类路径问题(含有包名的时候)
- Android核心分析 之九-------Zygote Service (转)
- 用户控件之类的东西,主要用户控件访问页面
- 为什么在执行模拟器后总产生temp.DefaultColorPhone的文件夹
- 黑客教程系列-简明批处理第二章
- 【原创】fast wcsnicmp 算法实现
- 自动过账MRKO生成IDOC
- 独立键盘的练习实验
- bsearch and qsort
- Struts2 action 输出 JSON
- oracle Flashback详解
- Session 相关信息
- && vs || 与 if vs elseif vs else 效率比较
- JFreeChart_前言