- UID
- 1
- 精华
- 积分
- 76365
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
百度来的,CSDN下的,经过我的修改了的。
注意开头那个“Copyleft”- //=============================================================================
- //通配符匹配算法
- //Copyleft JoStudio
- //-----------------------------------------------------------------------------
- #include<ctype.h>
- //定义和宏
- #define MATCH 1
- #define NOT_MATCH 0
- //匹配一个字符的宏
- #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;
- }
复制代码 |
|