【搬运】wildchar.c:判断通配符是否匹配的简单ANSI C源码
百度来的,CSDN下的,经过我的修改了的。注意开头那个“Copyleft”//=============================================================================
//通配符匹配算法
//Copyleft JoStudio
//-----------------------------------------------------------------------------
#include<ctype.h>
//定义和宏
#define MATCH 1
#define NOT_MATCH0
//匹配一个字符的宏
#define MATCH_CHAR(c1,c2,ic) ((c1==c2)||((ic==1)&&(tolower(c1)==tolower(c2))))
//=============================================================================
//函数:WildCharMatch
//描述:判断字符串是否匹配通配符
//-----------------------------------------------------------------------------
int WildCharMatch
(
char*src, //源字符串
char*pattern, //模板
int ignore_case //是否无视符号
)
{
int result;
while(*src)
{
if(*pattern=='*')
{
//跳过多余的*
while((*pattern=='*')||(*pattern=='?'))
pattern++;
//如果*后没有字符了,匹配
if(!*pattern)return MATCH;
//在src中查找一个与pattern中'*'后的一个字符相同的字符
while(*src&&(!MATCH_CHAR(*src,*pattern,ignore_case)))
src++;
//如果找不到,则匹配失败
if(!*src)return NOT_MATCH;
//否则匹配剩下的字符串
result=WildCharMatch(src,pattern,ignore_case);
//剩下的字符串匹配不上但src后一个字符等于pattern中'*'后的一个字符
//src前进一位,继续匹配
while((!result)&&
(*(src+1))&&
MATCH_CHAR(*(src+1),*pattern,ignore_case))
result=WildCharMatch (++src,pattern,ignore_case);
//返回结果
return result;
}
else
{
//如果pattern中当前字符不是'*'
//匹配当前字符
if(MATCH_CHAR(*src,*pattern,ignore_case)||('?'==*pattern))
//src,pattern分别前进一位,继续匹配
return WildCharMatch (++src, ++pattern, ignore_case);
else
return NOT_MATCH;
}
}
//如果src结束了,看pattern有否结束
if(*pattern)
{
//pattern没有结束
if((*pattern=='*')&&(*(pattern+1)==0))//如果pattern有最后一位字符且是'*'
return MATCH;
else
return NOT_MATCH;
}
else
return MATCH;
} 用VB的话,有个“Like”运算符。。。然后代码是零行。。 应该添加几个使用范例 美俪女神 发表于 2015-4-2 16:20
应该添加几个使用范例
比较赞同,添加范例
页:
[1]