IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    summer发表于 2016-06-06 10:12:50
    love 0

    题目

    实现’?’和’*’组成的通配符的匹配功能。
    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;
    }



沪ICP备19023445号-2号
友情链接