[华为OJ--C++]082-字符串通配符
2017-02-23 08:36
281 查看
题目描述:
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入描述:先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:返回匹配的结果,正确输出true,错误输出false
输入例子:a* abbbb
输出例子:true
算法实现:
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入描述:先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:返回匹配的结果,正确输出true,错误输出false
输入例子:a* abbbb
输出例子:true
算法实现:
#include<iostream> #include<vector> #include<string> #include<cmath> using namespace std; //************************************************ //* Author: 赵志乾 // * Date: 2017-2-23 // * Declaration: All Rigths Reserved !!! //***********************************************/ bool IsNormal(string& ret,int index); bool match(string& tmpstr,int index1,string& str,int index2) { if(index1>=tmpstr.length()) { if(index2>=str.length()) return true; else if(tmpstr[index1-1]=='*') return match(tmpstr,index1,str,index2+1); else return false; } if(index2>=str.length()) { if(index1>=tmpstr.length()) return true; else if(tmpstr[index1]=='*') return match(tmpstr,index1+1,str,index2); else return false; } bool result=false; switch(tmpstr[index1]) { case '*': if(index1==tmpstr.length()-1) if(IsNormal(str,index2)) return match(tmpstr,index1,str,index2+1); else return false; for(int i=index2+1;i<str.length();i++) if(match(tmpstr,index1+1,str,i)) return true; return false; case '?': if(IsNormal(str,index2)) return match(tmpstr,index1+1,str,index2+1); else return false; default: if(tmpstr[index1]==str[index2]) { return match(tmpstr,index1+1,str,index2+1); } else return false; } } int main() { string tmpstr,str; cin>>tmpstr>>str; for(int i=0;i<tmpstr.length();i++) if(tmpstr[i]>='A'&&tmpstr[i]<='Z') tmpstr[i]=tmpstr[i]-'A'+'a'; for(int i=0;i<str.length();i++) if(str[i]>='A'&&str[i]<='Z') str[i]=str[i ad5b ]-'A'+'a'; if(match(tmpstr,0,str,0)) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; } bool IsNormal(string& ret,int index) { if(ret[index]>='0'&&ret[index]<='9') return true; else if(ret[index]>='a'&&ret[index]<='z') return true; else return false; }
相关文章推荐
- 【华为OJ】【082-字符串通配符】
- 华为oj 字符串通配符
- 华为OJC++编程题001.计算字符串最后一个单词的长度
- Java算法--华为oj字符串通配符
- [华为OJ--C++]057-字符串运用-密码截取
- 华为oj初级 字符串通配符
- 华为OJ:字符串通配符
- 华为OJ 初级:字符串通配符
- 华为OJ题库-字符串通配符
- 华为OJ平台——字符串通配符
- [华为OJ--C++]088-按字节截取字符串
- [华为OJ--C++]023-字符串加解密
- [华为OJ--C++]025-字符串合并处理
- [华为OJ--C++]001-字符串最后一个单词的长度
- 华为OJ——字符串通配符
- 华为oj 字符串通配符
- 华为oj_字符串通配符
- 华为OJ——字符串通配符
- 华为OJ(字符串通配符)
- 华为OJ:字符串通配符