现在的位置: 首页 > 综合 > 正文

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

2019年04月09日 ⁄ 综合 ⁄ 共 885字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.