当前位置: 代码迷 >> 综合 >> 字符串通配符—ACM
  详细解决方案

字符串通配符—ACM

热度:96   发布时间:2024-02-22 11:53:32.0

题目描述

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符


输入:
通配符表达式;
一组字符串。


输出:
返回匹配的结果,正确输出true,错误输出false

输入描述:

先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

输出描述:

返回匹配的结果,正确输出true,错误输出false

示例1

输入

te?t*.*
txt12.xls

输出

false

算法实现

#include <iostream>
#include <string>
using namespace std;bool match(std::string& s1, std::string& s2, int s1i, int s2i)
{if (s1i == s1.size() && s2i == s2.size())		// 两边都匹配到最后return true;else if (s1i == s1.size() || s2i == s2.size())	// y一方还有字符return false;if (s1[s1i] == '?' || s1[s1i] == s2[s2i])return match(s1, s2, s1i + 1, s2i + 1);		// 相等或者?匹配一个字符else if (s1[s1i] == '*')//		匹配0个							匹配1个								至少匹配1个(相当于*还在,sli不需要+1)return match(s1, s2, s1i + 1, s2i) || match(s1, s2, s1i + 1, s2i + 1) || match(s1, s2, s1i, s2i + 1);return false;
}int main()
{std::string s1, s2;while (std::cin >> s1 >> s2){int s1i = 0, s2i = 0;if (match(s1, s2, s1i, s2i))std::cout << "true" << std::endl;elsestd::cout << "false" << std::endl;}return 0;
}

 

  相关解决方案