当前位置:文档之家› 数据结构课程设计-文学研究助手的实现

数据结构课程设计-文学研究助手的实现

安徽省巢湖学院计算机与信息工程学院

课程设计报告

课程名称《数据结构》

课题名称文学研究助手的实现

专业计算机科学与技术

班级 10计本2班

学号10012094

姓名韦玉坤

联系方式187********

指导教师蔡敏

20 11 年月日

目录

1、数据结构课程设计任务书.............................................................................................. 1

1.1、题目..................................................................................................................... 1

1.2、要求..................................................................................................................... 1

2、总体设计....................................................................................................................... 1

2.1、功能模块设计 ...................................................................................................... 1

2.2、所有功能模块的流程图........................................................................................ 1

3、详细设计....................................................................................................................... 1

3.1、程序中所采用的数据结构及存储结构的说明........................................................ 1

3.2、算法的设计思想................................................................................................... 2

3.3、稀疏矩阵各种运算的性质变换 .................................................错误!未定义书签。

4、调试与测试:................................................................................................................ 2

4.1、调试方法与步骤: ............................................................................................... 2

4.2、测试结果的分析与讨论: .................................................................................... 3

4.3、测试过程中遇到的主要问题及采取的解决措施:................................................. 3

5、时间复杂度的分析:..................................................................................................... 3

6、源程序清单和执行结果 ................................................................................................. 3

7、C程序设计总结 ............................................................................................................ 3

8、致谢.............................................................................................................................. 6

9、参考文献....................................................................................................................... 6

1、数据结构课程设计任务书

1.1、题目

文学研究助手的实现

1.2【设计要求】英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。

2、总体设计

2.1、功能模块设计

根据课程设计题目的功能要求,各个功能模块的组成框图如下:

输入矩阵1

2.2、所有功能模块的流程图

3、详细设计

1.ADT Aword{

数据对象:D={ai|a i∈字母字符集,i=1,2,…,n}

数据关系:R1={| a i-1,,ai∈D,i=2,3,…,n}

基本操作:

void get_next(char *T)

初始条件:T存在。

操作结果:求出T的next函数将结果存在next数组中。

int index_KMP(char *s,char *T,int pos)

操作结果:利用模式串T的next函数球T在主串S中第pos个字符之后的位置。

void compare(char *m,int k)

操作条件:文件存在。

操作结果:利用KMP算法将模式串m与文件内容匹配。

void output()

输出函数。

}

2.void main(){

输入信息初始化;

统计文件中每个单词出现的位置和次数;

输出测试结果;

}

3.1、程序中所采用的数据结构及存储结构的说明

英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须

在程序的一次运行之后就会全部完成。程序的输出结果是每个词出现次数和出现位置所在行的行号,格式自行设计。匹配时采用KMP算法。

实现提示:

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

号。

Input

输入第一行为小说的文件名(包含路径的文本文件名);第二行为一个正整数n,表示要查找单词的个数(n<10);从第三行开始共有n行,每行包括一个单词。

Output

输出共有n块,每块中第一行为查找的单词,从第二行开始为找到的各行的行号和列号,每个行号和列号占一行,若在同一行上出现多次,则只输出一个行号和多个列号并占一行,输出顺序按行号从小到大顺序排列。若没有找到则块内只输出第一行的单词即可。

3.2、算法的设计思想

4、调试与测试:

4.1、调试方法与步骤:

4.2、测试结果的分析与讨论:

4.3、测试过程中遇到的主要问题及采取的解决措施:

5、时间复杂度的分析:

6、源程序清单和执行结果

#include

#include

#include

#include

#include

#include

#include

using namespace std;

vectorcishu;//建立存放次数的动态数组

vector::iterator itercs;//指向数组的指针

vectorlines;//存放行数的数组

vector::iterator iterlines;//指针

vectorword;//需要匹配的单词的数组

vector::iterator iterwd;//指针

int next[100];

void get_next(char *T)

{//next函数

int i=1;next[1]=0;int j=0;

while(i

if(j==0||T[i]==T[j]){++i;++j;next[i]=j;}

else j=next[j];

}

int index_KMP(char *s,char *T,int pos){//KMP匹配函数int i=pos,j=1;

while(i<=strlen(s)&&j<=strlen(T)){

if(j==0||s[i]==T[j-1]){++i;++j;}

else j=next[j];

}

if(j>strlen(T)) return i-strlen(T);

else return 0;

}

void compare(char *m,int k)

{//将文件内容进行匹配

fstream file;

get_next(m);

char tmp[100];

int line=0,length,i,times;

file.open("d:\\sun.txt");

if(!(file.is_open())) cout<<"file can not be open"<

while(!(file.eof()))

{

line++;

file.getline(tmp,100,'\n');

i=0,times=0;

length=strlen(tmp);

while(i<=length)

{

if(i

i=index_KMP(tmp,m,i), times++;

i++;

}

if(times!=0)

{

cishu.push_back(times);

lines.push_back(line);

}

}

cishu.push_back(10000);

lines.push_back(10000);

file.clear();

file.seekg(0,ios_base::beg);

}

void output()

{//输出行数和所在次数

itercs=cishu.begin();

iterlines=lines.begin();

iterwd=word.begin();

while(iterwd!=word.end())

{

cout<<*iterwd;

iterwd++;

while(itercs!=cishu.end()&&iterlines!=lines.end()&&*itercs!=10000&&*iterlines!=10000){ cout<<"出现在第"<<*iterlines<<"行"<<*itercs<<"次"<

itercs++;iterlines++;

}

if(*itercs==10000&&*iterlines==10000) {itercs++;iterlines++;}

}

}

int main()

{

string temp="NONE";

size_t max = 10;

iterwd=word.begin();

char temp1[100];

int k=0;

cout<<"输入你需要匹配的单词"<

while(temp!="end")

{

cin>>temp;

if(temp=="end") break;

word.push_back(temp);

strcpy(temp1,temp.c_str());

compare(temp1,k);

k++;

}

output();

system("PAUSE");

return 0;

}

7、C程序设计总结

本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在

在操作本程序时可根据提示进行相关操作,能正确输出结果。在刚开始的几次调试中曾

经出现过不能运行、不能产生十以内随机数字、不能随机出现加减、不会正确输出结果、

不能进行循环练习等等问题。经过我的努力及同学的帮助,这些问题得到克服,并且使

程序的功能也得到了一定的完善。现在它能对出错的题目发出报警声,并且给出正确答

案。最后还能分别输出对错的题数及所得分数。

在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。

8、致谢

能够完成这次课程设计必须感谢C语言课程老师蔡敏、陶正华同学(她帮我修改了几处重要错误,同时启发我完善了该程序的功能)。

9、参考文献

[1] 贾宗璞、许合利,C语言程序设计,江苏:中国矿业大学出版社,2007.6

[2] 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1

[3] https://www.doczj.com/doc/2f17892627.html,

相关主题
文本预览
相关文档 最新文档