文学研究助手
【问题描述】
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为"文学研究助手"。
【基本要求】
英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。
【测试数据】
以你的C源程序模拟英文小说,C语言的保留字集作为待统计的词汇集。
【实现提示】
约定小说中的词汇一律不跨行。这样,每读入一行,就统计每个词在这行中的出现次数。出现位置所在行的行号可以用链表存储。若某行中出现了不止一次,不必存多个相同的行号。
如果读者希望达到选做部分(1)和(2)所提出的要求,则首先应把KMP算法改写成如下的等价形式,再将它推广到多个模式的情形。
i=1;j=1;
while(i!=s.curlen+1&&j!=t.curlerl十1)
{
while(j!=0&&s.ch[i]!=t.ch[j])
j=next[j]; //j==O或s.ch[i]==t.ch[j]
j++;i++;//每次进入循环体,i只增加一次
}
【选作内容】
(1)模式匹配要基于KMP算法(需查阅资料)。
(2)整个统计过程中只对小说文字扫描一遍以提高效率。
1