1.题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false
2.源码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
short isMatch(const char *s, const char *p)
{
if(s == NULL || p == NULL)
{
return 0;
}
short start = 0;
const char *str = s;
const char *ptr = p;
while(*str != 0x00)
{
switch(*ptr)
{
case '?':
break;
case '*':
start = 1;
s = str;
p = ptr;
while(*p == '*')
{
p++;
}
if(*p == 0x00)
{
return 1;
}
str = s - 1;
ptr = p - 1;
break;
default:
if(*str != *ptr)
{
if(!start)
{
return 0;
}
s++;
str = s-1;
ptr = p-1;
}
}
str++;
ptr++;
}
while(*ptr == '*')
{
ptr++;
}
return (*ptr == 0x00);
}
int main()
{
const char a[1024];
const char b[1024];
char u[2][10] = {"false", "true"};
int c;
while(scanf("%s %s", b, a) != EOF)
{
c = isMatch(a, b);
printf("%s\n", u[c]);
}
return 0;
}
3.编译源码
$ gcc -o example examle.c -std=c89
4.运行及其结果
$ ./example
te?t*.*
txt12.xls
false
网友评论