我一直在用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;
}
我的算法出了什么问题?我该如何解决?或者任何人都可以建议我一个更好的递归通配符匹配算法的解决方案?
答案 0 :(得分:1)
这里看一下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;
}