字符串匹配
问题描述
判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有‘ * ’和‘?’,且通配符不会连续出现 。(要求完全匹配,而不是包含)
其中,通配符‘ * ’:代替 0 个或多个字符,通配符‘ ? ’:代替一个字符
要求实现函数
int GetMatchSta (const char *ArrStr, constchar *KeyStr)
【输入】 ArrStr : 给定的字符串
KeyStr: 包含通配符的匹配字符串
【输出】 无
【返回】是否匹配,匹配返回1,不匹配返回0
示例
输入: ” abcdefg”, “a*'”
返回: 1
输入: “tommababcabc” , t?m*ab*abc
返回: 1
参考了网上一些方法后,贴出完整的代码。
/*
问题描述:字符串匹配
判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有' * '和'?',且通配符不会连续出现 。(要求完全匹配,而不是包含)
其中,通配符' * ':代替 0 个或多个字符,通配符' ? ':代替一个字符
要求实现函数
int GetMatchSta (const char *ArrStr, const char *KeyStr)
【输入】 ArrStr : 给定的字符串
KeyStr : 包含通配符的匹配字符串
【输出】 无
【返回】是否匹配,匹配返回1 ,不匹配返回0
示例
输入: " abcdefg", "a*'"
返回: 1
输入: "tommababcabc" , t?m*ab*abc
返回: 1
作者:gylltq
日期:2014-4-21
*/
#include <iostream>
//#include <string>
using namespace std;
int GetMatchSta(const char *ArrStr,const char *KeyStr)
{
switch(*KeyStr){
case '\0':
return (*ArrStr == '\0')?1:0;
case '?':
return (*ArrStr == '\0')?0:GetMatchSta(ArrStr+1,KeyStr+1);
case '*':
return (*ArrStr == '\0')?GetMatchSta(ArrStr,KeyStr+1):\
GetMatchSta(ArrStr+1,KeyStr)|GetMatchSta(ArrStr,KeyStr+1);
default:
return (*ArrStr == *KeyStr)?GetMatchSta(ArrStr+1,KeyStr+1):0;
}
}
int main()
{
const char *ArrDefault = "tommababcabc";
const char *ArrMatch = "t?m*ab*abc*";
cout << GetMatchSta(ArrDefault,ArrMatch) << endl;
}