注册 登录
编程论坛 数据结构与算法

文学研究助手与模式匹配KMP算法

yanvivi 发布于 2013-12-15 16:12, 530 次点击
已知KMP算法如下,如何将文学研究助手功能融入?
程序的输出结果是每个词的出现次数和出现位置所在的行的行号,格式自行设计。
待统计的“单词”在文本串中不跨行出现,它或者从行首开始,或者前置以一个空格符。
#include <stdio.h>
#include <string.h>
#define Maxsize 100

int StrIndex_KMP(char *s,char *t,int pos,int next[])
{
    int i,j;
    i=pos;
    j=1;
    while(i<=s[0]&&j<=t[0])
        if(j==0||s[i]==t[j])
        {
            i++;
            j++;
        }
        else
            j=next[j];
        if(j>t[0])
            return i-t[0];
        else
            return 0;
}

void Get_next(char t[],int next[])
{
    int i,j;
    i=1;
    j=1;
    next[1]=0;
    while(i<t[0])
    {
        if(j==0||t[i]==t[j])
        {
            i++;
            j++;
            next[i]=j;
        }
        else
            j=next[j];
    }
}

main()
{
    char s[Maxsize],t[Maxsize];
    int next[Maxsize],i;
    printf("请输入存储内容: \n");
    scanf("%s",s+1);
    printf("请输入匹配的内容: \n");
    scanf("%s",t+1);
    s[0]=strlen(s+1);
    t[0]=strlen(t+1);
    Get_next(t,next);
    i=StrIndex_KMP(s,t,1,next);
    if(i==0)
        printf("匹配失败!\n");
    else
        printf("匹配成功!\n首字符存储位置为%d\n",i);
}
1 回复
#2
yuccn2013-12-15 17:25
不知问咩
1