您的位置:首页 > 编程语言 > C语言/C++

[华为OJ--C++]082-字符串通配符

2017-02-23 08:36 281 查看
题目描述:

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。

要求:实现如下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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: