题目:
分析:
当前对应字符相同,则进行下一组匹配;当前字符不同,如果模式串是?,则匹配一个,如果当前模式串是*,则匹配-个、1个、多个。
#include <iostream>
#include <string>
using namespace std;
bool match(const char* pattern, const char* str)
{
if(*pattern=='\0' && *str=='\0')
return true;
else if(*pattern=='\0' || *str=='\0')
return false;
//模式串是?,则两个串同时向后移动(匹配一个)
if(*pattern=='?')
{
return match(pattern+1, str+1);
}
//模式串是*,匹配0个1个或者多个
else if(*pattern=='*')
{
return match(pattern+1, str) || match(pattern+1, str+1)|| match(pattern+1, str+1);
}
//匹配上了,直接匹配下一个
else if(*pattern==*str)
{
return match(pattern+1, str+1);
}
//来到这说明本次没有匹配上直接false
return false;
}
int main()
{
string s1;
string s2;
while(cin>>s1>>s2)
{
//s1是通配符表达式,s2是一组字符串
if(match(s1.c_str(), s2.c_str()))
{
cout<<"true"<<endl;
}
else
{
cout<<"false"<<endl;
}
}
return 0;
}