ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:524.97KB ,
资源ID:18350226      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18350226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计文本文件单词检索和计数.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计文本文件单词检索和计数.docx

1、数据结构课程设计文本文件单词检索和计数合肥学院计算机科学与技术系课程设计报告20172018学年 第二学期课程 数据结构与算法课程设计名称文本文件单词的检索与计数学生姓名陈映而 学号1604092001专业班级16软件工程(1)班指导教师孙斐 文本文件单词的检索与计数一、问题分析和任务定义要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。(1)建立文本文件(2)给定单词的计数(3)检索单词出现在文本文件中的行号、次数及其位置(4)主控菜单程序的结构二、数据结

2、构的选择和概要设计数据结构:1.所有存储形式都用顺序存储 2.用矩阵检索单词出现的位置和次数概要设计:该设计要求可分为三个部分实现:1.对文件的操作,其中包括文本文档的建立,文件名由用户用键盘输入;以及读取文本文档内容并显示在屏幕上;2.给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;3.检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。图2-1 课题目录图2-2 流程图图2-3 函数关系三、详细设计和编码1.头文件包含:#include#include#include2.功能细分(1)创建自定义名字文档用字符数组file

3、name存放特定的文件路径(D:Dev-Cpp课程设计数据)从键盘输入自定义的文档名字name,把name和“.txt”用strcat连接再用strcat把路径filename与文档名name连接起来打开文件时用变量(filename)表示文件名,若无该文件则创建图3-1 创建自定义名字文档编码(2)打开文件读取内容并输出输入文档名字,根据名字打开文件打开文件后,用fgets读取文档内容fgets读取一行输出一行,并用i记录行数fgets返回EOF(END OF FILE)表示文件结尾(3)写入文本输入文档名字,根据名字打开文档,若无该文档,则重新建立一个。根据提示,从键盘输入字符,最后以0结

4、束用字符变量ch接收字符,并用fputc()把字符输出到文本文档中图3-2 写入文档编码(4)单词的计数输入文档名字,根据名字打开文件根据提示输入单词用ch遍历文本文档把空格前的单词与给定单词比较,若相同则count+若不相同则重新开始比较(5)获取文件的行数输入单词获取文本行数:根据n判断,由于有些行是空行,无法算作一行,所以要判断n后一个字符是不是也是n 若是两个连续的n,则line-1; 若不是,则line+1;判断方法:当ch1为n时,把ch1赋值给ch2,ch1继续获取下一个字符,若ch1=ch2,则line-1;图3-3 获取文件行数编码(6)矩阵存储单词检索输入单词边统计边判断统

5、计:定义一个二维数组a,所有位置的初始值为-1 遍历文本文件时,在遇到第一个n前为第一行,遇到第一个空格前为第一个单词,即a00位置上的-1变为0,依次类推把每个单词与给定单词作比较,若该单词与给定单词相同,则该单词位置上的0的值变为1统计每一行值为1的数的个数,为给定单词在该行中出现的次数; 输出每一行为1的数的列的值,即为给定单词在该行中出现的位置;把行列数的值赋给矩阵的s,v;用循环,把数组中所有值为1的数的位置存储在矩阵的word(y,z)中,并且计算每行为1的总数count+;图3-4 矩阵的结构体类型图3-5 单词的位置、个数的输出四、上机调试过程1.输出文档内容时,fgets()

6、不能用EOF判断是否到达结尾,若把EOF换作null,但由于单词与单词之间有空格,无法正确显示。解决:用fgetc读取每个字符存放于ch中,当ch!=EOF的时候,就可以不断输出直到文件结尾,再用len记录行数,初始值为1,当遇到n时则+1。2.单词的计数出错,无法准确计算出文档有多少和给定的单词。解决:在循环中,判断ch为空格或转行符号时,要用&判断,不能用|,否则将在判断时出错在比较过程中,若下一个字符不符合就直接判断为错,从i=0重新开始,否则只要单词中包含给出的单词都表示正确在比较时还要主要标点符号,符号也会影响判断3.在计算文本文档行数的时候,若有空行,也会计算成一行。解决:当两个连

7、续的转行符号nn在一起时,line应该先+1再-1,即不变。 当一个转行符号n后不是转行符号,也不是文件结尾,line+14.标点符号后有空格,重复计算单词。解决:修改判断条件,若标点符号后是空格,则不计算单词5.调试过程中,完成输入点击“Enter”后,直接跳过程序进行下一步。解决:下一步进入该函数时,程序会自动获取该Enter键,导致函数直接结束。因此要用getchar()先获取该字符,才可以开始执行程序。五、测试结果及其分析图5-1 程序主菜单图5-2 功能1 子菜单1.创建文件图5-3 创建文件成功图5-4 文档成功出现在文件夹中2.文档内容显示图5-5 abc.txt文档内容图5-6

8、 abc.txt文档内容显示在屏幕上3.单词计数(1)测试数据1文档:abc.txt给定单词:you正确数据:9个检验数据:9个图5-7 abc.txt中you的单词总数(2)测试数据2文档:abc.txt给定单词:You(与you区分大小写)正确数据:4个检验数据:4个图5-7 abc.txt中You的单词总数(3)测试数据3文档:value.txt给定单词:it正确数据:3个检验数据:3个图5-8 value.txt中it的单词总数(4)测试数据4文档:value.txt给定单词:is正确数据:4个检验数据:4个图5-9 value.txt中is的单词总数4.单词定位(1)测试数据1文档:

9、abc.txt给定单词:you(共9个)图5-10 abc.txt中you所在的位置和个数(2)测试数据2文档:value.txt给定单词:is(共4个)图5-10 value.txt中is所在的位置和个数5.时间性能分析程序中对数据进行顺序存储的时间性能为O(n);但是用矩阵记录单词的坐标和个数用了两层for循环,其时间性能为O(n*n);在对文本文档进行遍历并输出,只需要while控制的一层循环,所以其时间性能为O(n);在计算文本文档的行数和单词的个数的时候,用了多个if-else的判断,但是仍然只有一层while控制的循环,所以其时间性能为O(n);总结:该程序的时间性能为O(n*n)

10、;六、用户使用说明1.功能叙述创建文本文档 显示文本文档的内容统计给定单词在文本文档中出现的次数检索给定单词,并输出其所在的行、列和每行总共出现的次数2.操作说明由数字0-9可以选择不同的功能,以及板块的退出除数字以外的符号可以结束程序(空格键和n除外)3.输入说明本程序涉及文件名字的输入和单词的输入。输入文件名:文件名由数字0-9、26个英文字母以及符号-组成;单词的输入:字符间不可出现空格,只能用26个英文字母组成,且区分大小写七、参考文献1 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。八、附录#include#include#include#defineMax

11、100voidFileOperation();voidCreateFile();voidShow();voidWordCount();voidExplor();typedefstruct inty,z;node;typedefstruct ints,v; intcountMax; nodewordMax;SeqMatrix; intmain()/主菜单intnumber;printf(*n);printf(1.文件操作n);printf(2.单词计数n);printf(3.单词定位n);printf(4.退出程序n);printf(*n);printf(n请输入功能序号:);scanf(%d,

12、&number);switch(number)case1:FileOperation();case2:WordCount();case3:Explor();default:exit(0);return0;voidFileOperation()/文件操作system(CLS);intnumber;printf(*n);printf(1.创建文件n);/printf(2.写入文件n);printf(2.显示内容n);printf(3.返回n);printf(*n);printf(n请输入功能序号:);scanf(%d,&number);switch(number)case1:CreateFile(

13、);case2:Show();case3:system(CLS);main();default:exit(0);voidCreateFile()/创建文档system(CLS);charfilename100=D:Dev-Cpp课程设计数据;/直接把地址赋值进数组中charname25;FILE*fp;getchar();printf(输入创建的文件的名字:);gets(name);strcat(name,.txt);/连接成一个文件名strcat(filename,name);if(fp=fopen(filename,a+)=NULL) printf(null); exit(0);/给文件输

14、入内容fprintf(fp,Weeachdictatewhatitis,howitis,andwhyitis.nnSheiskind,caring,nurturing,andloving.n);printf(创建成功!);fclose(fp);charch;printf(n任意值退出,0返回:);ch=getchar();if(ch=0) FileOperation();else exit(0);voidShow()/显示内容system(CLS);charfilename100=D:Dev-Cpp课程设计数据;charname25;FILE*fp;charch;/intlen=1;getch

15、ar();printf(输入打开的文件的名字:);gets(name);/输入文件名strcat(name,.txt);/连接成一个文件名strcat(filename,name);if(fp=fopen(filename,r)=NULL) printf(找不到该文件!n); Show();ch=fgetc(fp);/获取每个字符while(ch!=EOF) putchar(ch);/输出在屏幕 /*if(ch=n) len+; */ ch=fgetc(fp);fclose(fp);charc;printf(n任意值结束,0返回:);c=getchar();if(c=0) FileOperat

16、ion();else exit(0);voidWordCount()/单词计数getchar();system(CLS);charfilename100=D:Dev-Cpp课程设计数据;charname25;charcharacter10;FILE*fp;charch;intcount=0;intlen;charc;printf(请输入文本文件名:);gets(name);strcat(name,.txt);strcat(filename,name);if(fp=fopen(filename,r)=NULL) printf(找不到该文件n); main();printf(n请输入要计数的单词:

17、);gets(character);len=strlen(character);/len-1表示这个单词的大小inti=0,k=0;ch=fgetc(fp);while(ch!=EOF) if(ch!=&ch!=n&ch!=,&ch!=.&ch!=?&ch!=!) if(ch=characteri)/字符相等 i+; k+; ch=fgetc(fp); else if(i=len&i=k)/k是读取的单词中字母的序号,i是相同字符的个数,len是给定单词长度 count+; i=0;k=0; ch=fgetc(fp); if(ch=EOF&i=len&i=k) count+;printf(单词

18、总数为:%d,count);fclose(fp);printf(n任意值结束,0返回:);c=getchar();if(c=0) system(CLS); main();else exit(0);voidExplor()/单词检索charfilename100=D:Dev-Cpp课程设计数据;/文件路径charname25;/文件名charcharacter10;/给定单词FILE*fp;charch,ch2,c;inta2030;inti,j,k,x;intlen;/单词的长度getchar();system(CLS);for(i=0;i20;i+) for(j=0;j30;j+) aij=

19、-1; printf(请输入文本文件名:);gets(name);strcat(name,.txt);strcat(filename,name);if(fp=fopen(filename,r)=NULL) printf(找不到该文件n); main();printf(n请输入要计数的单词:);gets(character);len=strlen(character);/len-1表示这个单词的大小i=0,j=0,k=0,x=0;/i为行j为列k用于判断ch=fgetc(fp);while(ch!=EOF) if(ch!=&ch!=n&ch!=,&ch!=.&ch!=?&ch!=!&ch!=:)

20、 /printf(%c,ch); if(ch=characterk)/字符相等 k+; x+; /printf(%d,%d,k,x); ch=fgetc(fp); /判断单词是否一致 elseif(ch=|ch=,|ch=.|ch=?|ch=!|ch=:) ch=fgetc(fp); if(ch=) aij=0; ch=fgetc(fp); else aij=0; if(k=len&k=x) aij=1; k=0;x=0; j+; elseif(ch=n) ch2=ch; ch=fgetc(fp); if(ch=ch2) /aij=0; i+; j=0; ch=fgetc(fp); elsei

21、f(ch!=ch2&ch!=EOF) i+; j=0; printf(n);SeqMatrixm;m.s=i+1;m.v=30;for(i=0;iMax;i+)m.counti=0;k=0;for(i=0;im.s;i+)printf(第%d行该单词出现的位置:,i+1);for(j=0;jm.v;j+)if(aij=1)m.wordk.y=i;m.wordk.z=j;printf(%d,m.wordk.z+1);m.counti+;k+;/printf(%d,aij);printf(共%d个n,m.counti);printf(n);fclose(fp);printf(n任意值结束,0返回:);c=getchar();if(c=0) system(CLS); main();else exit(0);2018 年 2月

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2