文件通配符匹配检测C算法实现
2008-12-08 23:58
399 查看
转一老外的算法,不错很好用,多重扩展名也可以处理,例如 aaa.doc.bak
// --- 使用示范 -------------------
if ( FilenameMatch("*.exe", "filename.exe") == 1 )
{
// filename.exe 匹配 *.exe 结构
}
else
{
// 不匹配
}
// --- 函数实现如下 -------------------
int FilenameMatch(char *pat, char *name)
{
int match,ndone;
char *cpp,*cpn;
cpp = pat;
cpn = name;
match = 1;
ndone = 1;
while (ndone)
{
switch (*cpp)
{
case '*':
// skip to next letter
cpp++;
// skip to next letter
cpn = strchr(cpn, *cpp);
if(cpn==NULL)
{
cpn = name;
while (*cpn)
cpn++;
}
break;
case '?':
cpp++;
cpn++;
break;
case 0:
if (*cpn != 0)
match = 0;
ndone = 0;
break;
default:
if (tolower(*cpp) == tolower(*cpn))
{
cpp++;
cpn++;
}
else
{
match = 0;
ndone = 0;
}
break;
}
}
return(match);
if ( true )
{
}
else
{
}
}
// --- 使用示范 -------------------
if ( FilenameMatch("*.exe", "filename.exe") == 1 )
{
// filename.exe 匹配 *.exe 结构
}
else
{
// 不匹配
}
// --- 函数实现如下 -------------------
int FilenameMatch(char *pat, char *name)
{
int match,ndone;
char *cpp,*cpn;
cpp = pat;
cpn = name;
match = 1;
ndone = 1;
while (ndone)
{
switch (*cpp)
{
case '*':
// skip to next letter
cpp++;
// skip to next letter
cpn = strchr(cpn, *cpp);
if(cpn==NULL)
{
cpn = name;
while (*cpn)
cpn++;
}
break;
case '?':
cpp++;
cpn++;
break;
case 0:
if (*cpn != 0)
match = 0;
ndone = 0;
break;
default:
if (tolower(*cpp) == tolower(*cpn))
{
cpp++;
cpn++;
}
else
{
match = 0;
ndone = 0;
}
break;
}
}
return(match);
if ( true )
{
}
else
{
}
}
相关文章推荐
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- 顺序结构存储串实现串通配符匹配的算法
- 图像处理常用算法GPU实现三:基于模板匹配的边缘检测
- 基于rsync同步算法的文件同步系统JAVA实现(四)——分析并发送不匹配数据块
- c语言实现的带通配符匹配算法
- 如何实现文件增量同步——算法
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- 字符串模式匹配算法实现1
- 利用之前的链式栈实现左右符号匹配检测
- Canny边缘检测算法原理及其VC实现详解(二)
- shell脚本实现实时检测文件变更
- opencv实现正交匹配追踪算法OMP
- U盘小偷——C++实现U盘插入检测和文件扫描拷贝
- OpenCv中实现了三种立体匹配算法:
- 利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较)
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- 实现匹配文件(并自定义命名)的批量拷贝,后续上传改良版
- poj2446 Chessboard 二分图最大匹配 思考 匈牙利算法BFS实现
- windows下通配符匹配的Java实现
- Boyer-Moore 精确匹配算法实现(C/C++)