19.正则表达式匹配
.表示任意一个字符,*表示前面字符可以出现任意次,字符串的所有字符都匹配整个模式,如何?考虑全,用字符数组+递归
到当前字符,考虑当前模式字符
若下一字符有*,当前模式字符可有可无,分几种情况讨论
若下一字符无*,当前模式字符需匹配,分几种情况讨论
其余返错
bool match(const char* str, const char* pattern)
{
if(str == nullptr || pattern == nullptr)
return false;
return matchCore(str, pattern);
}
//自写
bool matchCore(const char* str, const char* pattern)
{
if (*str == '\0' && *pattern == '\0') return true;//同时结束
else if (*str != '\0' && *pattern == '\0') return false;//str未结束匹配,模式已结束
if (*(pattern+1)=='*')//下一位为*
{
if (*str == '\0')
return matchCore(str, pattern + 2);
else if (*str == *pattern || *pattern == '.')
return matchCore(str, pattern + 2) || matchCore(str + 1, pattern + 2) || matchCore(str + 1, pattern);
else
return matchCore(str, pattern + 2);
}
if (*str == '\0') return false;//str结束匹配,模式未结束,返错
if (*str == *pattern || *pattern == '.')//一对一匹配
return matchCore(str + 1, pattern + 1);
return false;
}