题目
实现’?’和’*’组成的通配符的匹配功能。
1) ‘?’匹配任意单个字母。
2) ‘*’匹配任意字母序列,包括空序列。
3) 输入的字符串要整体覆盖,不能部分覆盖。
输入
aa a
aa aa
aaa aa
aa *
aa a*
ab ?*
aab c*a*b
aab *b
输出
Not Match
Match
Not Match
Match
Match
Match
Not Match
Match
分析
与昨天的题目类似,不过这里的’*’代表意义不同,所以实现也不同。
代码
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s, p;
cin >> s >> p;
bool star = false;
int i = 0, j = 0;
while (1)
{
if (s[i] == '\0')
{
cout << "Not Match" << endl;
return 0;
}
if (p[j] == '?')
{
++i;
++j;
}
else if (p[j] == '*')
{
star = true;
while (p[j] == '*')
{
++j;
}
if (p[j] == '\0')
{
cout << "Match" << endl;
return 0;
}
}
else
{
if (s[i] != p[j])
{
if (!star)
{
cout << "Not Match" << endl;
return 0;
}
++i;
}
else
{
++i;
++j;
if (p[j] == '\0' && s[i] == '\0')
{
cout << "Match" << endl;
return 0;
}
}
}
}
return 0;
}