字符串------正则表达式匹配

题目描述:
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。
分析:
难点主要是一个匹配成功的字符后面紧接着出现’*’应该如何处理. 可以分三种情况:

  1. 文本串不移动, 匹配串移动两个字符;
  2. 文本串移动一个字符, 匹配串不移动;
  3. 文本串移动一个字符, 匹配串移动两个字符;
bool match(char *str, char *pattern){
    if(str == NULL || pattern == NULL)
        return false;
    return func(str, pattern);
}

bool func(char *str, char *pattern){
    if(*str == '\0' && *pattern == '\0')
        return true;
    if((*str == '\0' && *pattern != '\0') || (*str != '\0' && *pattern == '\0'))
        return false;
    if(*(pattern+1) == '*'){
        if(*str == *pattern || (*pattern == '.' && *str != '\0')){
            return func(str, pattern+2) || func(str+1, pattern) || func(str+1, parrern+2);
        }
        else{
            return func(str+1, pattern+2);
        }
    }
    if(*str == *pattern || (*pattern == '.' && *str != '\0'))
        return func(str+1, pattern+1);

    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值