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

来源:互联网 发布:公网ip绑定域名 编辑:程序博客网 时间:2024/04/24 15:42

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

 

其中,通配符‘*’:代替0个或多个字符,通配符‘?’:代替一个字符

 

l  要求实现函数

 

int GetMatchSta (const char *ArrStr, const char *KeyStr)

 

【输入】 ArrStr:    给定的字符串

 

         KeyStr:      包含通配符的匹配字符串

 

【输出】无

 

【返回】是否匹配,匹配返回1,不匹配返回0

 

l  示例

 

输入:” abcdefg”, “a*'”

 

返回:1

 

 

 

输入:“tommababcabc” , t?m*ab*abc

 

返回:1



实现想法,很自然的自动机分析,直接匹配。


#include <stdio.h>int GetMatchSta(const char *ArrStr, const char *KeyStr){int starnext = 0;int keyidx = 0;int stridx = 0;int match = 0;while (1){if (ArrStr[stridx] == '\0' ){if (KeyStr[keyidx] ==  '\0')match = 1;break;}if (KeyStr[keyidx] == '?'){keyidx++;stridx++;}else if (KeyStr[keyidx] == '*'){starnext = keyidx+1;keyidx++;}else{if (KeyStr[keyidx] != ArrStr[stridx] && starnext != 0){keyidx = starnext;if (KeyStr[keyidx] != ArrStr[stridx])stridx++;}else if (KeyStr[keyidx] != ArrStr[stridx] && starnext == 0){break;}else{keyidx++;stridx++;}}}//end whilereturn match;}int main(){char *str1="abcdefg";char *kstr1 = "a*";char *str2 = "tommababcabc";char *kstr2 = "t?m*ab*abc";char *str3 = "011099";char *kstr3 = "0*1*9?";printf("%d\n",GetMatchSta(str1, kstr1));printf("%d\n",GetMatchSta(str2, kstr2));printf("%d\n",GetMatchSta(str3, kstr3));return 0;}


原创粉丝点击