题解 | #字符串通配符#
字符串通配符
http://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int match(char *str1, char *str2)
{
if(str1[0]=='\0' && str2[0]=='\0')
return 1;
else if(str1[0]=='\0' || str2[0]=='\0')
return 0;
if(str1[0]=='?' || str1[0]==str2[0])
return match(str1+1, str2+1);
if(str1[0]=='*')
{
if(*(str1+1)=='*')
return (match(str1+2, str2) || match(str1+2, str2+1) || match(str1+1, str2+1));
else
return (match(str1+1, str2) || match(str1+1, str2+1) || match(str1, str2+1));
}
return 0;
}
int main()
{
char str1[101], str2[101];
scanf("%s %s", str1, str2);
int flag = 1;
for(int i=0; i<strlen(str1); i++)
{
if(str1[i]>='A' && str1[i]<='Z')
str1[i] += 32;
}
for(int i=0; i<strlen(str2); i++)
{
if(str2[i]>='A' && str2[i]<='Z')
str2[i] += 32;
if(isalpha(str2[i])==0 && isdigit(str2[i])==0 && str2[i]!='.')
flag = 0;
}
if(flag && match(str1, str2))
printf("true\n");
else
printf("false\n");
return 0;
}