|
Notes: |
| |
Implement wildcard pattern matching with support for '?' and '*'. |
| |
'?' Matches any single character. |
| |
'*' Matches any sequence of characters (including the empty sequence). |
| |
The matching should cover the entire input string (not partial). |
| |
The function prototype should be: |
| |
bool isMatch(const char *s, const char *p) |
| |
Some examples: |
| |
isMatch("aa","a") ? false |
| |
isMatch("aa","aa") ? true |
| |
isMatch("aaa","aa") ? false |
| |
isMatch("aa", "*") ? true |
| |
isMatch("aa", "a*") ? true |
| |
isMatch("ab", "?*") ? true |
| |
isMatch("aab", "c*a*b") ? false |
| |
|
| |
Solution: ... |
| |
*/ |
bool machcore(char *str, char *pattern)
{
if (str == NULL || pattern == NULL)
return false;
if (*str == '\0'&&*pattern == '\0')
return true;
if ((*str != '\0'&&*pattern == '\0'))
return false;
if ((*str == '\0'&&*pattern != '\0'))
{
while (*pattern!='\0')
{
if (*pattern == '*')
pattern++;
else
return false;
}
return true;
}
if (*str == *pattern || *pattern == '?'&&*str != '\0')
return machcore(str + 1, pattern + 1);
if (*pattern == '*'&&*str != '\0')
{
if (*(pattern + 1) == '*')
pattern++;
if (*(pattern + 1) =='\0')
return true;
if (*str == *(pattern + 1) || *(pattern + 1) == '?')
return machcore(str + 1, pattern + 2);
}
return false;
}