#include <stdio.h>
/* 判断是否能够通配,除字母和数组,其他字符无法通配 */
int is_match(char ch)
{
if((ch >= '0' && ch <= '9')
|| (ch >= 'a' && ch <= 'z')
)
{
return 1;
}
return 0;
}
int match(char* str0, char* str1)
{
/* 同时到字符末尾,则匹配成功 */
if(*str0 == '\0' && *str1 == '\0')
{
return 1;
}/* 有一个字符串先到末尾,则匹配失败 */
else if((*str0 == '\0') || (*str1 == '\0'))
{
return 0;
}
/* 遇到问号,通配一个字符 */
if(*str0 == '?' && is_match(*str1))
{
return match(str0+1, str1+1);
}
else if(*str0 == '*' && is_match(*str1))
{ /* 遇到*号,且下一个字符也为*,则仅通配一个字符就够了 */
if(*(str0+1) != '\0' && *(str0+1) == '*')
{
return match(str0+1, str1+1);
}
else /* 遇到*号,且下一个字符不为*,通配0个,1个,多个 */
{
//遇到*号,匹配0个(str0+1,str1不用动),匹配1个(str0和str1都往前移动1位),匹配多个(str0不用动,str1+1)
return match(str0+1, str1) || match(str0+1, str1+1) || match(str0, str1+1);
}
}
else if(*str0 == *str1)
{
return match(str0+1, str1+1);
}
return 0;
}
int main()
{
char str[2][101] = {0};
int res = 0;
int i;
for(i = 0; i < 2; i++)
{
scanf("%s", str[i]);
}
int len0 = strlen(str[0]);
int len1 = strlen(str[1]);
for (int k = 0; k < len0; k++)
{
if (str[0][k] >= 'A' && str[0][k] <= 'Z')
str[0][k] = str[0][k] - 'A' + 'a';
}
for (int k = 0; k < len1; k++)
{
if (str[1][k] >= 'A' && str[1][k] <= 'Z')
str[1][k] = str[1][k] - 'A' + 'a';
}
if(match(str[0], str[1]))
{
printf("true\n");
}
else
{
printf("false\n");
}
}