/* 功能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;
}