精品文档---下载后可任意编辑2024 文学讨论助手+数据结构程序设计 文学讨论助手+数据结构程序设计 问题描述:文字讨论人员需要统计某篇英文小说中某些特定单词的出现次数和位置,试写出一个实现这一目标的文字统计系统。这称为“文学讨论助手”。 算法输入:文本文件和词集。 算法输出:单词出现的次数,出现位置所在行的行号(同一行出现两次的只输出一个行号)。 Input 输入第一行为小说的文件名(包含路径的文本文件名); 第二行为一个正整数 n,表示要查找单词的个数(nOutput 输出共有 n 块,每块中第一行为查找的单词,从第二行开始为找到的各行的行号和列号,每个行号和列号占一行,若在同一行上出现多次,则只输出一个行号和多个列号并占一行,输出顺序按行号从小到大顺序排列。若没有找到则块内只输出第一行的单词即可Sample Input e:\ 4 1110 ababc 12345 end Sample Output 1110 row=1,col=10 row=2,col=3,11 ababc row=1,col=19 12345 end row=3,col=1 文件内容为: abcdefg 11110 ababababc aw11100011111000abc end 以下是我写的程序,实现了问题的要求,愿与有共同兴趣的人一起探讨。 #include #include #define MAXSTRLEN 255 // 最 大 串 长 typedef char SString[MAXSTRLEN+1]; //串的定长顺序存储表示,0 号单元存放串的长度 int next[MAXSTRLEN]; //KMP 算法中用到的next void get_next(SString T,int next[]) //求 next 值 { int j=1,k=0; next[1]=0; while(j{ if(k==0||T[k]==T[j]) { ++j;++k; if(T[j]!=T[k]) next[j]=k; else next[j]=next[k]; } else k=next[k]; } } int Index(SString S,SString T,int pos) //KMP算法 { int i=pos,j=1; while(i{ if(j==0||S[i]==T[j]) {++i;++j;} else j=next[j]; } if (j>T[0]) return (i-T[0]); else return 0; } int lenth(SString str) // 求 串 长 { int i=1; while(str[i]) i++; return(i-1); } void find(char name[],SString keys) //查找函数,该函数是整个程序的重要部分,对于输入的每一个 { //要查找的关键字,从小说文件中逐行读取字符串查找 SString text; //存放从小说文件读取的一行字符串 int i=1,j=0,k; //i 用于存放行号,j 用于存放列号,k 用于输出格式的控制 FILE *fp; if (!(fp=(fopen(name,“r“)))) //打开小说...