标签:tmp 匹配 HJ71 通配符 substr length str 字符串 reg
题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
?:匹配1个字符
通配符表达式;
一组字符串。
输出:
返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false 数据范围:字符串长度:1\le s\le 100\1≤s≤100 进阶:时间复杂度:O(n^2)\O(n2) ,空间复杂度:O(n)\O(n)输入描述:
先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:
返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false
示例
输入: te?t*.* txt12.xls 输出: false 输入: **Z 0QZz 输出: true
解题思路
代码如下:
#include<string> #include<iostream> #include<vector> using namespace std; bool check(string reg,string str){ if(reg.length() == 0 && str.length() == 0)return true; if(reg.length() == 0 || str.length() == 0)return false; if(reg[0] == '?'){ if(!isdigit(str[0]) && !isalpha(str[0]) )return false; return check(reg.substr(1,reg.length()-1), str.substr(1,str.length()-1)); }else if(reg[0] == '*'){ int tmp = 0; while(reg[tmp] == '*'){ tmp++; } tmp--; return check(reg.substr(tmp+1,reg.length()-tmp),str) || check(reg.substr(tmp+1,reg.length()-tmp),str.substr(1,str.length()-1)) || check(reg.substr(tmp,reg.length()-tmp+1),str.substr(1,str.length()-1)); }else if(tolower(reg[0]) == tolower(str[0])){ return check(reg.substr(1,reg.length()-1),str.substr(1,str.length()-1)); } return false; } int main(){ string reg,str; while(cin>>reg>>str){ if(check(reg,str)) cout<<"true"<<endl; else cout<<"false"<<endl; } }
标签:tmp,匹配,HJ71,通配符,substr,length,str,字符串,reg 来源: https://www.cnblogs.com/glodears/p/16558967.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。