there, I do not speak the algorithm principle. you can get the knowledge everywhere. I provide the C++ code.
/*************************************************************************
> File Name: KMP.cpp
> Author: ryq
> Email: ranyongqing@163.com
> Created Time: 2014年05月22日 星期四 18时09分36秒
************************************************************************/
#include<iostream>
#include<string>
#include<utility>
using namespace std;
pair<string,int> KMP(string &src,string &des)
{
int size = src.size();
int len = des.size();
string str;
pair<string,int> res;
if(len > size){
res = make_pair(str,-1);
return res;
}
int table[len];
table[0] = 0;
for(int i = 1; i < len; i++){
if(des[i] == des[table[i-1]])
table[i] = table[i-1] + 1;
else
table[i] = 0;
}
for(int i = 0; i < len; i++)
cout<<table[i]<<" ";
int i, j;
i = j = 0;
for(; i < size && j < len;){
if(des[j] == src[i]){
i++;
j++;
}
else{
if(j == 0)
i++;
else
j = table[j-1];
}
}
if(j == len){
res = make_pair(des,i-len);
}
else{
res = make_pair(str,-1);
}
return res;
}
int main()
{
string src,des;
cout<<"Input source string:";
(cin>>src).get();
cout<<"Input des string:";
cin>>des;
pair<string,int>res;
res = KMP(src,des);
cout<<res.first<<","<<res.second<<endl;
}