华为编程大赛-字符串匹配
来源:互联网 发布:公网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;}
- 华为编程大赛-字符串匹配
- 华为编程大赛--字符串匹配
- 华为编程大赛-字符串匹配
- 华为编程大赛之括号匹配
- 华为编程大赛---含有通配符的字符串匹配问题---基于正则表达式
- 华为编程大——字符串匹配
- 华为编程大赛
- 华为编程大赛2012
- 2010华为编程大赛
- 华为编程大赛——删除字符串中重复字符
- 华为编程大赛决赛题
- 2012 华为编程大赛 语法分析
- 华为编程大赛--路径查找
- 华为编程大赛--出圈问题
- 华为编程大赛--高精度加减法
- 华为编程大赛汇总----java
- 华为编程大赛-排序算法
- 华为2014编程大赛初赛
- BoundsChecker使用
- c++中qsort()排序函数的使用qsort函数应用大全
- FPGA验证技术
- 如何实现百度快照后面的小手状态
- ubuntu 查看硬件的图形界面工具 hardinfo
- 华为编程大赛-字符串匹配
- 最新Android ADT, SDK, SDK_tool等官方下载说明(及时更新)
- CommandArgument用法
- C++:求10个数中最大的两个数
- 简单的重力
- servlet
- acfun id
- 黑马程序员_面向对象之继承和接口
- Java.text包学习笔记