Visual C++ 7.1Visual C++ 8.0Windows VistaVisual C++ 7.0Visual Studio .NET 2003Windows 2003Visual Studio 2005Windows 2000Visual C++ 6.0Windows XPC中级开发Visual StudioWindowsC++
字符串通配符匹配(* 和 ?)





2.00/5 (9投票s)
一个简单的函数,
引言
我遇到了一个问题,需要根据通配符(* 和 ?)来匹配一个字符串
与模式。本文中介绍的函数是一个简单的实现,用于进行这种匹配。以下是一些示例模式:
sam*
sam*e
samp?e
s*p?e
- 等等。
Using the Code
该函数的用法非常简单。只需使用两个参数调用该函数即可。第一个参数是要与第二个参数中指定的模式进行比较的字符串
。该函数不执行任何错误检查。
//
//
bool pattern_match(const char *str, const char *pattern) {
enum State {
Exact, // exact match
Any, // ?
AnyRepeat // *
};
const char *s = str;
const char *p = pattern;
const char *q = 0;
int state = 0;
bool match = true;
while (match && *p) {
if (*p == '*') {
state = AnyRepeat;
q = p+1;
} else if (*p == '?') state = Any;
else state = Exact;
if (*s == 0) break;
switch (state) {
case Exact:
match = *s == *p;
s++;
p++;
break;
case Any:
match = true;
s++;
p++;
break;
case AnyRepeat:
match = true;
s++;
if (*s == *q) p++;
break;
}
}
if (state == AnyRepeat) return (*s == *q);
else if (state == Any) return (*s == *p);
else return match && (*s == *p);
}
历史
- 2007年7月22日:初始发布