题目:请实现一个函数用来匹配包含’. ‘和’*'的正则表达式。
模式中的字符’.‘表示任意一个字符,而’*'表示它前面的字符可以出现任意次(含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。
例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配
'.'符号还可以直接匹配
‘*’符号只能依靠递归来实现
分三种情况:
a* 可以匹配 “” 、 “a” 、 “aa…a”
- 实现代码:
#include <iostream>
bool match(char* str, char* pattern) {
if (*str == '\0')
if(*pattern == '\0')
return true;
else if(*pattern=='\0')
return false;
if (*(pattern + 1) == '*') {
if (*str == *pattern || (*pattern=='.' && *str!='\0'))
// *匹配出现一次 *匹配多次 *匹配0次
return match(str + 1, pattern + 2) || match(str + 1, pattern) || match(str, pattern + 2);
else
return match(str, pattern + 2);
}
return (*str == *pattern || *pattern == '.') && match(str + 1, pattern+1);
}
int main()
{
std::cout << match((char*)"bab",(char*) "ba*b");
}