朴素字符串匹配

子串的定位操作通常被称做串的模式匹配。

#include<iostream>
using namespace std;
/*返回子串t在主串s第pos个位置之后的位置,若不存在,返回-1*/
int Index(char *s,char *t,int pos)
{
    int len_s = strlen(s);
    int len_t = strlen(t);
    int i = pos;//i指示主串的下标,从pos位置(和下标一致,从0开始)开始匹配 
    int j=0;
    while(i<len_s && j<len_t)
    {
      if(s[i] == t[j])
      {
        i++;
        j++;
      }
      else
      {
        i = i-j+1;
        j = 0;
      }
    }
    if(j==len_t)
      return i-len_t;
    else
      return -1;
}

int main()
{
    cout<<"请输入两个字符串:"<<endl;
    char s[100];
    char t[100];
    cin>>s;
    cin>>t;
    cout<<"t[]在s[]的下标为"<<Index(s,t,0)<<"处开始匹配"<<endl;
    system("pause");
    return 0;
}
结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值