含有通配符*的字符匹配(C语言)
含有通配符的字符匹配,采用贪心算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | //1 -> true //0 -> false int IsMatch( const char * reg, const char *str) { int r_len = ( int ) strlen (reg); int r_p = 0; int r_p_last = -1; int s_len = ( int ) strlen (str); int s_p = 0; int s_p_last = -1; while (s_p < s_len) { if (r_p < r_len && (*(str + s_p) == *(reg + r_p))) { r_p++; s_p++; } else if (r_p < r_len && (*(reg + r_p) == '*' )) { r_p_last = r_p; r_p++; s_p_last = s_p; } else if (r_p_last > -1) { r_p = r_p_last + 1; s_p_last++; s_p = s_p_last; } else { return 0; //false } } while (r_p < r_len && (*(reg + r_p) == '*' )) { r_p++; } if (r_p == r_len) { return 1; //true } return 0; //false } |
如果要匹配?的话,添加
*(reg + r_p) =='?'
就行了
if (r_p < r_len && (*(str + s_p) == *(reg + r_p))) {
if (r_p < r_len && (*(str + s_p) == *(reg + r_p)||*(reg + r_p) =='?')) {
注:之前匹配?的地方没写对,经过评论区的读者提醒,已经改正
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步