要求各位实现字符串通配符的算法

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
:匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同)
?:匹配1个字符

注意:匹配时不区分大小写。

img


// 用递归就可以了
#include <iostream>
#include <string>
using namespace std;

bool match(const char* pattern, const char *str)
{
    if (*pattern == '\0' && *str == '\0')
        return true;
    if (*pattern == '\0' || *str == '\0')
        return false;

    if (*pattern == '?')
    {
        return match(pattern + 1, str + 1);
    }
    else if (*pattern == '*')
    {
        // 匹配0个1个或多个
        return match(pattern + 1, str) || match(pattern + 1, str + 1) || match(pattern, str + 1); 
    }
    else if (*pattern == *str)
    {
        return match(pattern + 1, str + 1);
    }

    return false;
}
int main(void)
{
    string pattern, str;
    while (cin >> pattern >> str)
    {
        bool ret = match(pattern.c_str(), str.c_str());
        if (ret)
            cout << "true" << endl;
        else
            cout << "false" << endl;
    }
    return 0;
}