GEEK编程练习— —通配符匹配

来源:互联网 发布:rc串联电路实验数据 编辑:程序博客网 时间:2024/05/16 05:57

题目

实现’?’和’*’组成的通配符的匹配功能。
1) ‘?’匹配任意单个字母。
2) ‘*’匹配任意字母序列,包括空序列。
3) 输入的字符串要整体覆盖,不能部分覆盖。

输入

aa aaa aaaaa aaaa *aa a*ab ?*aab c*a*baab *b

输出

Not MatchMatchNot MatchMatchMatchMatchNot MatchMatch

分析

与昨天的题目类似,不过这里的’*’代表意义不同,所以实现也不同。

代码

#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;}
0 0
原创粉丝点击