华为编程大赛-字符串匹配

字符串匹配

  问题描述

判断包含通配符的匹配字符串是否完全匹配输入的字符串,匹配字符串中包含的通配符仅有‘ * ’和‘?’,且通配符不会连续出现 。(要求完全匹配,而不是包含)

其中,通配符‘ * ’:代替 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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值