#include <iostream> #include <string> using namespace std; bool match(const string& pat,const string& tag,int pidx,int tidx){ // 同时到达末尾! if(pidx >= pat.size() && tidx >= tag.size()) return true; // 只有一个到达末尾! if(pidx >= pat.size() || tidx >= tag.size()) return false; // 模式串是 ? 单字符通配符! if(pat[pidx] == '?'){ // 如果对应到的位置不能被替代! if(!isdigit(tag[tidx]) && !isalpha(tag[tidx])) return false; // 能被替代,向下继续走! return match(pat,tag,pidx + 1,tidx + 1); }else if(pat[pidx] == '*'){ // 遇到的是一个 * 无穷通配符! while(pat[pidx] == '*') pidx ++; // 连续的 * 只能算是一个 * pidx --; // 只认为连续的*中最后一个*有效! if(!isdigit(tag[tidx]) && !isalpha(tag[tidx])) return match(pat,tag,pidx + 1,tidx); // 当* 无法匹配 * 做空字符! return match(pat,tag,pidx + 1,tidx) || match(pat,tag,pidx + 1,tidx + 1) || match(pat,tag,pidx,tidx + 1); // * 可以不用于匹配, 可以用于匹配单个字符,可以匹配多个字符! }else if(tolower(pat[pidx]) == tolower(tag[tidx])){ // 当对应位置字符相同,就直接一起向下即可! return match(pat,tag,pidx + 1,tidx + 1); } return false; } int main(){ string pat,tag; getline(cin,pat); getline(cin,tag); if(match(pat,tag,0,0)) cout<<"true"; else cout<<"false"; cout<<endl; return 0; }