3 、字符串匹配( 50 分)
问题描述
判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有‘ * ’和‘?’,且通配符不会连续出现 。(要求完全匹配,而不是包含)
其中,通配符‘ * ’:代替 0 个或多个字符,通配符‘ ? ’:代替一个字符
要求实现函数
int GetMatchSta (const char *ArrStr, const char *KeyStr)
【输入】 ArrStr : 给定的字符串
KeyStr : 包含通配符的匹配字符串
【输出】 无
【返回】是否匹配,匹配返回1 ,不匹配返回0
示例
输入: ” abcdefg”, “a*'”
返回: 1
输入: “tommababcabc” , t?m*ab*abc
返回: 1
#include <cstdio>
#include <cstring>
int GetMatchSta(const char *ArrStr, const char *KeyStr)
{
while(*ArrStr != '\0' && *KeyStr != '\0')
{
if(*ArrStr++ == *KeyStr || *KeyStr == '?')
KeyStr++;
else if(*KeyStr == '*')
{
if(*ArrStr == *(++KeyStr) && ArrStr !=NULL)
{
if(GetMatchSta(ArrStr,KeyStr))
{
return 1;
}
else
KeyStr--;
}
else
if(ArrStr !=NULL)
KeyStr--;
}
else
break;
}
//printf("%d %d\n",strlen(ArrStr),strlen(KeyStr));
if(strlen(ArrStr) || strlen(KeyStr))
return 0;
else
return 1;
}
int main()
{
const char *ArrStr,*KeyStr;
ArrStr = "tommababcabc";
KeyStr = "t*ab*bc";
printf("%d\n", GetMatchSta(ArrStr, KeyStr));
return 0;
}