【问题标题】:Wildcard Matching Recursive Algorithm C++通配符匹配递归算法 C++
【发布时间】:2015-11-04 21:24:05
【问题描述】:

我一直在用 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;
}

我的算法有什么问题?我应该如何解决它?或者有人可以建议我为递归通配符匹配算法提供更好的解决方案吗?

【问题讨论】:

  • 有什么症状?

标签: c++ string algorithm recursion wildcard


【解决方案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;
}

【讨论】:

  • 时间复杂度是多少?
  • @user1846749 对于没有* 的字符串,线性。对于带有* 的字符串,与星号的数量成指数关系。请参阅en.wikipedia.org/wiki/… 中关于 1993 年“ABORT”修改的讨论。
  • @user1846749 好的,我已将 ABORT 移植到此示例。见repl.it/repls/ScarceMinorTechnician
猜你喜欢
  • 2012-02-12
  • 2011-02-28
  • 2023-03-12
  • 2021-10-16
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2017-02-10
  • 2011-01-29
相关资源
最近更新 更多