’.‘代表一个任意字符
a’*‘代表0~n个a
测试两个字符串是否匹配
#include <iostream>
#include <string>
using namespace std;
bool matchCore(const char* str,const char* pattern)
{
if(*str=='\0' && *pattern=='\0')
return true;
if(*str!='\0'&&*pattern=='\0')
return false;
if(*(pattern+1)=='*')
{
if(*pattern==*str ||(*pattern=='.'&&*str!='\0'))
return matchCore(str+1,pattern+1)||matchCore(str+1,pattern)||matchCore(str,pattern+2);
else
return matchCore(str,pattern+2);
}
if(*pattern==*str ||(*pattern=='.'&&*str!='\0'))
return matchCore(str+1,pattern+1);
return false;
}
bool match(const char* str,const char* pattern)
{
if(str==NULL || pattern==NULL)
return false;
return matchCore(str,pattern);
}
int main()
{
string _str,_pattern;
getline(cin,_str,'\n');
getline(cin,_pattern,'\n');
const char *str=_str.c_str();
const char *pattern=_pattern.data();
cout<<match(str,pattern)<<endl;
}