通配符匹配递归算法C++
Wildcard Matching Recursive Algorithm C++
我一直在用 C++ 编写递归通配符匹配算法。但我无法完成它。看看我目前写的。
?
匹配任意字符,*
匹配任意字符串
bool WildCardMatch(char *str, char *match){
while (*match){
if (*match =='?'){
if (!*str){
return false;
}
str++;
match++;
}
else if (*match == '*'){
if (WildcardMatch(str, match + 1)){
return true;
}
return false;
}
}
return !*str && !*match;
}
我的算法有什么问题?我该如何解决?或者谁能建议我更好的递归通配符匹配算法解决方案?
这里看一下this递归通配符匹配算法。它会解决你的烦恼。
bool WildcardMatch(const TCHAR *pszString, const TCHAR *pszMatch){
while (*pszMatch)
{
if (*pszMatch == _T('?'))
{
if (!*pszString)
return false;
++pszString;
++pszMatch;
}
else if (*pszMatch == _T('*'))
{
if (WildcardMatch(pszString, pszMatch + 1))
return true;
if (*pszString && WildcardMatch(pszString + 1, pszMatch))
return true;
return false;
}
else
{
if (::CharUpper(MAKEINTRESOURCE(MAKELONG(*pszString++, 0))) != ::CharUpper(MAKEINTRESOURCE(MAKELONG(*pszMatch++, 0))))
return false;
}
}
return !*pszString && !*pszMatch;
}
我一直在用 C++ 编写递归通配符匹配算法。但我无法完成它。看看我目前写的。
?
匹配任意字符,*
匹配任意字符串
bool WildCardMatch(char *str, char *match){
while (*match){
if (*match =='?'){
if (!*str){
return false;
}
str++;
match++;
}
else if (*match == '*'){
if (WildcardMatch(str, match + 1)){
return true;
}
return false;
}
}
return !*str && !*match;
}
我的算法有什么问题?我该如何解决?或者谁能建议我更好的递归通配符匹配算法解决方案?
这里看一下this递归通配符匹配算法。它会解决你的烦恼。
bool WildcardMatch(const TCHAR *pszString, const TCHAR *pszMatch){
while (*pszMatch)
{
if (*pszMatch == _T('?'))
{
if (!*pszString)
return false;
++pszString;
++pszMatch;
}
else if (*pszMatch == _T('*'))
{
if (WildcardMatch(pszString, pszMatch + 1))
return true;
if (*pszString && WildcardMatch(pszString + 1, pszMatch))
return true;
return false;
}
else
{
if (::CharUpper(MAKEINTRESOURCE(MAKELONG(*pszString++, 0))) != ::CharUpper(MAKEINTRESOURCE(MAKELONG(*pszMatch++, 0))))
return false;
}
}
return !*pszString && !*pszMatch;
}