朴素的模式匹配算法

1.设计思想

2.代码实现及解释

3,。测试用例

一.设计思想

1.同时向后跑

2.如果相等 i++,j++;

3.如果不相等  i=i-j+1;j=0;

二.代码实现


int BF_Search(const char*str,const char *sub,int pos){
    //str主串,sub字串,从主串pos下标开始向后查找
    assert(str!=NULL&&sub!=NULL&&pos>=0&&pos<strlen(str));
    if(str==NULL||sub==NULL||pos<0||pos>=strlen(str)){
        return -1;
    }
    int lenstr=strlen(str);//保存主串的长度
    int lensub=strlen(sub);//保存字串的长度
    int i=pos,j=0;//i-->主串匹配时的下标   j->保存字串匹配时的下标
    while(i<lenstr&&j<lensub){//当主串和字串没有走出范围
        if(str[i]==sub[j]){//相等   i++j++,判断下一个字符
            i++;
            j++;
        }
        else{//代表失配,则让i回退到这一次匹配前的位置的下一位,j归0
            i=i-j+1;
            j=0;//这两行顺序不能反
        }
    }
    //此时循环结束,两种可能,判断i和j谁走到尾吧
    //判断i和j谁走到尾,
    //字串j走到尾部代表匹配成功了
    if(j>=lensub){
        return i-j;//回到匹配前的位置
    }
    else{
        return -1;
    }
  //如果字串j没走到尾巴,那代表主串没有字串想要的,则返回-1;    
}

三.测试用例

int main(){
    const char *str="ababcabcdabcde";//主串
    const char*sub="abcd";
    int tmp=BF_Search(str,sub,0);
    printf("%d\n",tmp);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值