字符串通配符

该博客探讨了一种使用递归解决字符串匹配问题的方法,包括处理通配符'*'和'?'的情况。代码示例展示了如何在C++中实现这个算法,通过递归检查两个字符串是否相匹配,同时考虑大小写敏感性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 循环子问题,可以用动规或者递归,递归写起来好理解一点:

#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string s1;
string s2;
bool if_Match(int x,int y){
    if(x==s1.length()&&y==s2.length())return true;
    else if(x>s1.length()||y>s2.length())return false;
    if(s1[x]==s2[y]) return if_Match(x+1,y+1);//递归
    else if(s1[x]=='?'){
        if(!(isdigit(s2[y])||isalpha(s2[y])))return false;//如果s2中存在不能匹配的 字符
        return if_Match(x+1, y+1);//否则递归
    }
    else if(s1[x]=='*'){
        while(s1[x+1]=='*')x++;//看下一个是不是继续*,是就继续看下一个
        return if_Match(x,y+1)||if_Match(x+1,y)||if_Match(x+1,y+1);//不是,就匹配 *,三种情况,*匹配 null,*匹配一个,*匹配多个
    }
    return false;
}
int main(){

while(cin>>s1>>s2){
for(int i=0;i<s1.length();i++)
   s1[i]=tolower(s1[i]);
for(int j=0;j<s2.length();j++)
    s2[j]=tolower(s2[j]);
if(if_Match(0,0))
    cout<<"true"<<endl;
else 
    cout<<"false"<<endl;
}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值