文学研究助手

文学研究助手是一个系统,用于统计英文小说中特定形容词的出现次数和位置。该系统采用KMP算法进行高效模式匹配,通过逐行读取文本并利用KMP算法的next数组(从1开始)来实现。文章提供了KMP算法的详细解释和C语言实现链接,同时对比了使用和不使用KMP算法的情况。

如有错误多多指正! 

【问题描述】

     文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为"文学研究助手"。

【测试数据】

      以你的C源程序模拟英文小说,C语言的保留字集作为待统计的词汇集。

【实现提示】

    约定小说中的词汇一律不跨行。这样,每读入一行,就统计每个词在这行中的出现次数。出现位置所在行的行号可以用链表存储。若某行中出现了不止一次,不必存多个相同的行号。

    如果读者希望达到选做部分(1)和(2)所提出的要求,则首先应把KMP算法改写成如下的等价形式,再将它推广到多个模式的情形。

这个主要使用了KMP算法,并且这个KMP算法的next数组是从下标从1开始的,学习注意参考KMP算法(快速模式匹配算法)详解以及C语言实现 (biancheng.net)

在此处可以引出KMP算法的学习以及解释(下标从0开始): (61条消息) 【详解】KMP算法——多图,多例子(c语言)_Zero0Tw0的博客-优快云博客

使用

目录

使用KMP算法:

未使用KMP算法:


KMP算法:

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 1000//定义串的长度;
typedef char SString[MaxSize + 1];//定义一个字符数组,并取别名;
int next[MaxSize];//用于kmp算法,主要存储每个字符的前后缀的值;
int length(SString str){
	int i=1;
	while(str[i]){
		i++;
	}
	return i-1;
}
void get_next(SString T,int nextval[]){
//	int i,k; 
//    i=1,k=0;
//    next[1]=0; //next数组是与p传长度相同的int型数组,数组的每个位置记录了模式串串对应位置匹配失败后要回溯的下标。
//    while(i<T[0]){//T[0]储存的是字符串的长度, 
//    	if(k==0||T[i]==T[k]){
//    		++i;
//    		++k;
//    		next[i]=k;
//		}
//		else{
//			k=next[k];//否则k只的值回溯 
//		}
//	}
	int i=1;     
    next[1]=0;
    int k=0;
    while (i<T[0]) {
        if (k==0||T[i-1]==T[k-1]) {
            i++;
            k++;
            if (T[i-1]!=T[k-1]) {
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值