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; }