建立文本检索与计数

上传人:ali****an 文档编号:121855965 上传时间:2020-02-26 格式:DOC 页数:25 大小:350KB
返回 下载 相关 举报
建立文本检索与计数_第1页
第1页 / 共25页
建立文本检索与计数_第2页
第2页 / 共25页
建立文本检索与计数_第3页
第3页 / 共25页
建立文本检索与计数_第4页
第4页 / 共25页
建立文本检索与计数_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《建立文本检索与计数》由会员分享,可在线阅读,更多相关《建立文本检索与计数(25页珍藏版)》请在金锄头文库上搜索。

1、 吕超 文本文件单词的检索与计数 第页 共25页 1 引 言本程序主要实现文本文件单词的检索与计数,正文包括:对文本文件单词的检索与计数程序的详细要求,对程序的分析,勾画程序思路及内容的流程图,程序代码,程序运行相关的截图,以及我们在本次程序中的详细分工和收获。1.1 课程设计目的在本程序设计中,主要通过给定位置的串匹配算法,实现文本文件单词的查找,计数和记录单词的位置和行号。在C程序设计中我们对于算法的具体实现过程有一个深刻的理解,除了算法本身外,须借助一些辅助数据结构,在本程序中借用字符串对数据进行存储和输出操作。通过循环比较的方法,查找出单词的个数和位置。同时培养自己的算法设计和算法分析

2、能力,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的工作方法、作风和相互合作的精神。1.2 课程设计内容及要求要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该

3、行中出现的次数以及在该行中的相应位置。 (1)建立文本文件。 (2)给定单词的计数。 (3)检索单词出现在文本文件中的行号、次数及其位置。 (4)主控菜单程序的结构。 头文件包含。 菜单选项包含:建立文件、单词定位、单词计数、退出程序。 选择1-4执行相应的操作,其他字符为非法。2 设计思路与方案2.1 课程设计思路 课程设计要求是实现文本文件单词的检索与计数,所以主要从两大块进行程序设计,一是单词的计数和检索的程序设计,二是文本文件写入字符串的程序设计。 进行单词计数和检索的程序设计时,首先用结构体定义字符串,然后再考虑通过母串代表文件文本,用子串代表单词,然后通过母串和子串的循环比较,确定

4、母串是否存在子串,子串出现的次数以及位置。用j表示子串开始比较的位置,用i表示比较过程子串中字母的位置,通过j和i的累加,循环比较字符是否相等。最后通过j与子串长度的大小关系,判断母串中是否存在子串以及存在的位置和次数。 对于文本单词的检索与计数的程序设计,分为两部分。第一部分是通过调用fget将文本写入字符串数组,然后调用串匹配函数,查找显示单词在文本中出现的次数;第二部分是通过fget将文本写入字符串数组然后调用串匹配函数,查找显示单词在文本中出现的次数然后根据sub数组输入单词出现的位置。2.2 程序所用的功能函数 程序设计当中涉及到的功能函数较多,具体如下表2-1所示: 表2-1 功能

5、函数列表函数名功能描述void CreateTextFile()建立文本文件函数void SubStrCount()文本文件单词计数函数void SubStrInd()检索单词出现在文本文件中的行号、位置及出现的次数Int PartPosition()给定位置的串匹配2.3 课程设计流程图 主函数设计流程如图2.1: 图2.1 程序流程图串匹配设计流程如图2.2:图2.2程序流程图3 详细实现3.1 数据结构体设计定义结构体typedef struct char SsMaxStrSize; /Ss是一个可容纳1024个字符的字符数组 int length; SeqString; /定义顺序串类

6、型3.2 功能函数实现(1)给定位置的串匹配:int PartPosition(SeqString S,SeqString T,int k)将T字符数组中的从0开始与S字符数组的字符逐一比较。当j大于等于T.length时表示S字符数组中存在T字符数组,返回T字符数组开始的位置。否则说明S字符数组中没有T字符数组。(2)建立文本文件函数:void CreateTextFile()用C语言I/O流输入名字建立一个文件。(3)文本文件单词计数函数:void SubStrCount()将文件字符串写入一个数组。调用给定为位置的串匹配,查找记录单词个数。(4)检索单词出现在文本文件中的行号、位置及在该

7、行中出现的次数:void SubStrInd()将文件字符串写入一个数组。调用给定为位置的串匹配,记录单词个数,出现的位置。3.3 函数分析 (1)int PartPosition(SeqString S,SeqString T,int k) 本函数的作用是给定位置的串匹配,存在就返回子串的位置。不存在返回-1int PartPosition(SeqString S,SeqString T,int k) int i,j; i=k-1; j=0; while(iS.length & j=T.length) return i-T.length; else return -1; (2)void Cr

8、eateTextFile()本函数的作用是输入一个名称,建立文本文件void CreateTextFile() SeqString S; char filename10,flags; FILE *fp; printf(输入要建立的文件名:); scanf( %s,filename); fflush(stdin); fp=fopen(filename,w); flags=n; while(flags=n|flags=N) printf(输入一行文本:); gets(S.Ss); fflush(stdin); S.length=strlen(S.Ss); fwrite(&S,S.length,1,

9、fp); printf(结束输入吗? :); flags=getchar(); fflush(stdin); fclose(fp); printf(建立文件结束!n);(3) void SubStrCount() 本函数的作用是将void CreateTextFile()中输入的字符串,写入一个数组。然后调用int PartPosition(SeqString S,SeqString T,int k)函数记录要查找的单词出现的次数。void SubStrCount() FILE *fp=NULL; SeqString S,T; char filename20; int i=0,j,k; whi

10、le(true) printf(输入文本文件名:); scanf(%s,filename); fp=fopen(filename,r); if(fp=NULL) printf(输入文件名不存在。n); else break; printf(输入要统计计数的单词:); scanf( %s,T.Ss); T.length=strlen(T.Ss); while(!feof(fp) memset(S.Ss,0,MaxStrSize); fgets(S.Ss,MaxStrSize,fp); S.length=strlen(S.Ss); k=1; while(kS.length-1) j=PartPosition(S,T,k); if(j0) break; else i+; k=j+T.length; printf(n单词%s在文本文件%s中共出现%d次n,T.Ss,filename,i);(4)void SubStrInd()本函数的作用是本函数的作用是将void CreateTextFile()中输入的字符串,写入一个数组。然后调用int PartPosition(SeqString S,SeqString T,int k)函数记录要查找的单词出现在文本文件中的行号、位置及在该行中出现的次数void Su

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号