字符串匹配(2)

/* 功能Function Description:     字符串匹配
   开发环境Environment:          DEV C++ 4.9.9.1
   技术特点Technique:            未改进的 KMP算法
   版本Version:                  1
   作者Author:               qing du
   日期Date:                 20120808
   备注Notes:
*/

#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
typedef char *SString;
int len,next[1000];

void get_next(SString s)  // KMP算法
{
     int i,j;
     i=1; next[1]=0; j=0;
     while(i<len)
     {
          if(j==0||s[i]==s[j])
          {
              ++i;
              ++j;
              next[i]=j;
          }
          else  j=next[j];
     }
}

 

int Index(SString S,SString T,int pose)
{   //T 为非空串。如主串 S中的第 pos个字符之后存在与 T相等的子串
    //则返回第一个这样子串在 S中的位置,否则返回 0;
    int i,j;
    i=pose; j=1;
    get_next(T);           
    while(i<=S[0]&&j<=T[0])
    {
         if(j==0||S[i]==T[j]) {++i;++j;}
         else j=next[j]; //利用 KMP算法计算出的 next[j];
    }  
    if(j>T[0]) return i-T[0];   //匹配成功后返回 pose 后匹配的 i - T[0];
    else return 0;
}

int main()
{
    char a[100],b[10];
    int pos;
    cin>>a+1;
   while(cin>>b+1)
    { 
       cin>>pos;
       a[0]=strlen(a+1);
       b[0]=strlen(b+1);
       len=b[0];                    
       cout<<Index(a,b,pos)<<endl;    
    }
    system("pause");
    return 0;
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值