文本文件单词的检索 数据结构_第1页
文本文件单词的检索 数据结构_第2页
文本文件单词的检索 数据结构_第3页
文本文件单词的检索 数据结构_第4页
文本文件单词的检索 数据结构_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1滁滁州州学学院院课课程程设设计计报报告告课程名称课程名称: 数据结构 设计题目设计题目: 文本文件单词的检索 系系 别:别: 网络与通信工程系 专专 业业: 网络工程 组组 别别: 起止日期起止日期: 2012 年 6 月 14 日 2012 年 6 月 21 日 指导教师指导教师: 计算机与信息工程学院二一二年制2目录1 1 引引言言.42 2 分分析析.42.1 建立文本文件 建立文本文件的实现思路.42.2 给定单词的计数.42.3 检索单词出现在文本文件中的行号、次数及其位置.42.4 主控菜单程序的结构.43 3 详详细细分分析析.53.1 流程图.5311 建立文本文件 .531

2、2 给定单词的计数 .63.2 程序的实现.83,2.1 预编命令,定义结构体和全局变量 .93.2.2 建立文本文件 .93.2.3 检索某单词的行号,出现次数,以及位置 .103.2.4 菜单函数 .113.2.4 退出整个程序 .123.2.5 主体函数 .124 4 调调试试与与操操作作说说明明.124.1 开始界面 如图 4-1 所示.134.2 输入文本文件,计数单词出现的次数。如图 4-2 所示.1343 检索某单词的行号,出现次数,以及位置。如图 4-3,4-4 所示.135 5 总总结结讨讨论论.146 6 致致谢谢.157 7 参参考考文文献献.1531 引言本程序主要围绕

3、的是文本文件单词的检索与计数,正文包括:对文本文件单词的检索与计数程序的详细要求,对程序的分析,勾画程序思路及内容的流程图,主程序代码,程序运行后相对应要求的所有截图,还有我们做完程序后的总结讨论,以及我们在本次程序中的详细分工。2 分析 2.1 建立文本文件 建立文本文件的实现思路 (1) 定义一个串变量 (2) 定义文本文件 (3) 输入文件名,打开该文件 (4) 循环读入文本行,写入文本文件,其过程如下: While(不是文件输入结束) 读入一文本行至串变量; 串变量写入文件; 输入是否结束输入标志; (5) 关闭文件 2.2 给定单词的计数 该功能需要用到前一节中设计的模式匹配算法,逐

4、行扫描文本文件。匹配一个,计数器加 1,直到整个文件扫描结束;然后输出单词的次数。 2.3 检索单词出现在文本文件中的行号、次数及其位置 2.4 主控菜单程序的结构 (1) 头文件包含 (2) 菜单选择包括: 1、 建立文件 2、 单词计数 3、 单词定位 4、 退出程序 (3)选择 14 执行相应的操作,其他字符为非法3 3 详细分析详细分析3.1 流程图311 建立文本文件定义一个串变量 ,定义文本文件, 输入文件名,打开该文件 , 循环读入文本行,写入文件。如图 3-1 所示4定义一个串变量 定义文本文件 输入文件名,打开该文件 循环读入文本行,写入文本文件关闭文件While是文本文件

5、读入一文本行至串变量串变量写入文件文件输入结束YN图 3-1 建立文本基本流程图建立文本文件的思路过程312 给定单词的计数逐行扫描文本文件。匹配一个,计数器加 1,直到整个文件扫描结束;然后输出单词的次数。如图 3-2 所示 5给定一个单词定义N=1,S=0一共给了M个单词扫描第N个单词If N=MS=S+1If第N个单词与所给单词相同结束输出S及为单词的计数N=N+1NYYN图 3-2 单词计数流程图给定单词计数的过程 逐行扫描文本文件。扫描一个单词,单词数加 1,匹配一个,计数器加 1,输出该单词数,行数到底6以此,行数加 1,单词数清零,直到整个文件扫描结束;然后输出单词的次数,行号,

6、第几个单词。如图 3-3 所示输入文本文件名输入要检索的单词定义L=1,I=0,N=1扫描第L行第N个单词If第N个单词与所给单词相同N=N+1假设一共X行每行Y个单词输出NN=1If N=XI=I+1L=L+1If L=Y输出II=0输出L结束L为行数I为次数N为第几个单词YNYNYN如 3-3 检索单词行号、次数和位置流程图检索单词的出现在文本文件中的行号,次数以及位置3.2 程序的实现73,2.1 预编命令,定义结构体和全局变量/ 文本文件单词的检索系统 /#include#include#define MaxStrSize 256 /* 根据用户需要自己定义大小 */typedef s

7、truct char chMaxStrSize; /* ch 是一个可容纳 256 个字符的字符数组 */ int length; SString;/* 定义顺序串类型 */int PartPosition (SString s1,SString s2,int k) int i,j; i=k-1; /* 扫描 s1 的下标,因为 c 中数组下标是从 0 开始,串中序号相差 1 */ j=0;/* 扫描 s2 的开始下标 */ while(is1.length & j=s2.length) return i-s2.length; else return -1;/* 表示 s1 中不存在

8、s2,返回-1 */ /* 表示 s1 中存在 s2,返回其起始位置 */ /* 函数结束 */3.2.2 建立文本文件/*件一个文本文件,在里面输入想要的文本*/void CreatTextFile() SString S; char fname10,yn; FILE *fp; printf(输入要建立的文件名:); scanf(%s,fname);8 fp=fopen(fname,w); yn=n;/* 输入结束标志初值 */ while(yn=n|yn=N) printf(请输入一行文本:);gets(S.ch);gets(S.ch); S.length=strlen(S.ch); fw

9、rite(&S,S.length,1,fp); fprintf(fp,%c,10);/* 是输入换行 */ printf(结束输入吗?y or n :);yn=getchar(); fclose(fp);/* 关闭文件 */ printf(建立文件结束!n); 3.2.3 检索某单词的行号,出现次数,以及位置/*输入 2 进行计算出现次数,输入 3 可以确定文本出现的位置,以此实现检索单词的出现在文本文件中的行号,次数以及位置*/void SubStrCount() FILE *fp; SString S,T;/* 定义两个串变量 */ char fname10; int i=0,j,

10、k; printf(输入文本文件名:); scanf(%s,fname); fp=fopen(fname,r); printf(输入要统计计数的单词:); scanf(%s,T.ch); T.length=strlen(T.ch); while(!feof(fp) /* 扫描整个文本文件 */ /* fread(&S.ch,1,sizeof(S),fp);/读入一行文本 */ memset(S.ch,0,256); fgets(S.ch,100,fp); S.length=strlen(S.ch); k=0; /* 初始化开始检索位置 */ while(kS.length-1) /*

11、检索整个主串 S */ j=PartPosition(S,T,k);/* 调用串匹配函数 */ if(j0 ) break; else i+;/* 单词计数器加 1 */ k=j+T.length;/* 继续下一字串的检索 */ 9 printf(n 单词%s 在文本文件%s 中共出现%d 次n,T.ch,fname,i); /* 统计单词出现的个数 */ void SubStrInd() FILE *fp; SString S,T; /* 定义两个串变量 */ char fname10; int i,j,k,l,m; int wz20; /* 存放一行中字串匹配的多个位置 */ printf

12、(输入文本文件名:); scanf(%s,fname); fp=fopen(fname,r); printf(输入要检索的单词:); scanf(%s,T.ch); T.length=strlen(T.ch); l=0; /* 行计数器置 0 */ while(!feof(fp) /* 扫描整个文本文件 */ /* fread(&S,sizeof(S),1,fp); /读入一行文本 */ memset(S.ch,0,256); fgets(S.ch,256,fp); S.length=strlen(S.ch); l+; /* 行计数器自增 1 */ k=0;/* 初始化开始检索位置 *

13、/ i=0; /* 初始化单词计数器 */ while(kS.length-1) /* 检索整个主串 S */ j=PartPosition(S,T,k); /* 调用串匹配函数 */ if(j0) printf(行号:%d,次数:%d,位置分别为:,l,i); for(m=1;m=i;m+) printf(%4d,wzm+1); printf(n); /* 检索单词出现在文本文件中的行号、次数及其位置 */3.2.4 菜单函数/10/*编写菜单函数,以便使用者方便运行使用。按 1 建立文本文件,按 2 进行单词字符串的计数,按 3 进行单词字符串的定位,按 4 退出程序程序*/ void C

14、reatTextFile(),SubStrCount(),SubStrInd(); int xz; do printf(=n); printf(| 文本文件的检索、字串的统计及定位 |n); printf(|= |n); printf(| 1. 建立文本文件 |n); printf(| 2. 单词字串的计数 |n); printf(| 3. 单词字串的定位 |n); printf(| 4. 退出整个程序 |n); printf(=n); printf( 请选择(1-4)n ); scanf(%d,&xz); switch(xz) case 1 : CreatTextFile();bre

15、ak; case 2 : SubStrCount();break; case 3 : SubStrInd();break; case 4 : return 0; default:printf(选择错误,重新选 n); 3.2.4 退出整个程序/*用此函数来退出文本文件的单词检索*/void end()printf(谢谢使用文本文件的单词检索!n);exit(0);3.2.5 主体函数/*主函数,利用无限循环可以进行连续的操作*/int main() while(1); CreatTextFile(),SubStrCount(),SubStrInd();114 4 调试与操作说明调试与操作说明4

16、.1 开始界面 如图 4-1 所示图 4-1 文本文件开始界面我们可以看到共有四个选项,从 1 到 4 依次完成建立文本文件,到单词字串计数,再到单词字串的定位,最后退出!4.2 输入文本文件,计数单词出现的次数。如图 4-2 所示 图 4-2 建立文本 43 检索某单词的行号,出现次数,以及位置。如图 4-3,4-4 所示12 图 4-3 输入要检索的单词图 4-4 输出要检索单词的信息从图 4-3 可以看出输入的单词在文本中出现 2 次,从图 4-4 可以看出单词在文本的第一行,第几个单词处!5 5 总结讨论总结讨论经过一周的奋斗,这次数据结构的课程设计终于做完了。通过这次设计我们也着实又

17、感受了一次编程的乐趣,从中也学到了不少知识。感受最深的一点是:以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,先对这个课程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了 。 然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。在这次实验中我终于克服了这一障碍,一遍13遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊! 这次试验也让我看到了自己的不足,还是不太用模板类。还有许多关于 C+的一些比较具体的东西还不太懂,比方说指针。这次试验还让我们意识到只有不断的在电脑上调试程序,自己的水平才能得到提高。我会继续我们的兴趣编写程序的,相信在越来越多的尝试之后,自己会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论