数据结构字符串匹配问题,急!!

从键盘输入字符文件名以及子串,用改进KMP算法在字符文件中实现子串查找。要求程序输出子串的改进nextval数组元素值以及子串在文件中成功匹配的次数(查找失败输出成功匹配次数为0),c++语言

 #include<iostream>
#include<string.h>

using namespace std;

int *COMPUTE_PREFIX_FUNCTION(string P) {
    int m=P.size();
    int *A=new int[m+1];
    A[1]=0;
    int k=0;
    for(int q=2;q<=m;q++) {
        while(k>0 && P[k]!=P[q-1]) {
            k=A[k];
        }

        if(P[k]==P[q-1]) {
            k++;
            A[q]=k;
        }
    }
    return A;
} 

void KMP_MATCHER(string T,string P) {
    int n=T.size();
    int m=P.size();
    int *A=COMPUTE_PREFIX_FUNCTION(P);
    int q=0;
    for(int i=1;i<=n;i++) {
        while(q>0 && P[q]!=T[i-1]) {
            q=A[q];
        }

        if(P[q]==T[i-1]) {
            q++;
        }
        if(q==m) {
            cout<<"Pattern occurs with shift "<<i-m+1<<endl;
            q=A[q];
        }
    }
}

int main() {
    string P,T;
    cout<<"请输入父字符串:";
    cin>>T;
    cout<<"请输入父字符串:";
    cin>>P;
    KMP_MATCHER(T,P);
    return 0;
}
/*
abctergytrabcgregabcdsfabcf
abc
*/

图片说明

算法导论里有介绍和证明,网上也有好多,可以先百度百度,照葫芦画瓢

http://blog.csdn.net/xumin330774233/article/details/14441809