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

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值