建立文本的检索与计数_第1页
建立文本的检索与计数_第2页
建立文本的检索与计数_第3页
建立文本的检索与计数_第4页
建立文本的检索与计数_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

吕超 文本文件单词的检索与计数 第 页 共 25 页 1 引引 言言 本程序主要实现文本文件单词的检索与计数 正文包括 对文本文件单词的检索与 计数程序的详细要求 对程序的分析 勾画程序思路及内容的流程图 程序代码 程序 运行相关的截图 以及我们在本次程序中的详细分工和收获 1 1 课程设计目的课程设计目的 在本程序设计中 主要通过给定位置的串匹配算法 实现文本文件单词的查找 计 数和记录单词的位置和行号 在 C 程序设计中我们对于算法的具体实现过程有一个深刻 的理解 除了算法本身外 须借助一些辅助数据结构 在本程序中借用字符串对数据进 行存储和输出操作 通过循环比较的方法 查找出单词的个数和位置 同时培养自己的 算法设计和算法分析能力 提高综合运用所学的理论知识和方法独立分析和解决问题的 能力 训练用系统的观点和软件开发一般规范进行软件开发 培养软件工作者所应具备 的工作方法 作风和相互合作的精神 1 2 课程设计内容及要求课程设计内容及要求 要求编程建立一个文本文件 每个单词不包含空格且不跨行 单词由字符序列构成且 区分大小写 统计给定单词在文本文件中出现的总次数 检索输出某个单词出现在文本 中的行号 在该行中出现的次数以及位置 该设计要求可分为三个部分实现 其一 建 立文本文件 文件名由用户用键盘输入 其二 给定单词的计数 输入一个不含空格的 单词 统计输出该单词在文本中的出现次数 其三 检索给定单词 输入一个单词 检 索并输出该单词所在的行号 该行中出现的次数以及在该行中的相应位置 1 建立文本文件 2 给定单词的计数 3 检索单词出现在文本文件中的行号 次数及其位置 4 主控菜单程序的结构 头文件包含 菜单选项包含 建立文件 单词定位 单词计数 退出程序 选择 1 4 执行相应的操作 其他字符为非法 吕超 文本文件单词的检索与计数 第 页 共 25 页 2 设计思路与方案设计思路与方案 2 1 课程设计思路课程设计思路 课程设计要求是实现文本文件单词的检索与计数 所以主要从两大块进行程序设计 一是单词的计数和检索的程序设计 二是文本文件写入字符串的程序设计 进行单词计数和检索的程序设计时 首先用结构体定义字符串 然后再考虑通过母 串代表文件文本 用子串代表单词 然后通过母串和子串的循环比较 确定母串是否存 在子串 子串出现的次数以及位置 用 j 表示子串开始比较的位置 用 i 表示比较过程子 串中字母的位置 通过 j 和 i 的累加 循环比较字符是否相等 最后通过 j 与子串长度的 大小关系 判断母串中是否存在子串以及存在的位置和次数 对于文本单词的检索与计数的程序设计 分为两部分 第一部分是通过调用 fget 将 文本写入字符串数组 然后调用串匹配函数 查找显示单词在文本中出现的次数 第二 部分是通过 fget 将文本写入字符串数组然后调用串匹配函数 查找显示单词在文本中出 现的次数然后根据 sub 数组输入单词出现的位置 2 2 程序所用的功能函数程序所用的功能函数 程序设计当中涉及到的功能函数较多 具体如下表程序设计当中涉及到的功能函数较多 具体如下表 2 1 所示 所示 表表 2 1 功能函数列表功能函数列表 函数名函数名功能描述功能描述 void CreateTextFile 建立文本文件函数 void SubStrCount 文本文件单词计数函数 void SubStrInd 检索单词出现在文本文件中的行号 位置及出现的次 数 Int PartPosition 给定位置的串匹配 吕超 文本文件单词的检索与计数 第 页 共 25 页 2 3 课程设计流程图课程设计流程图 主函数设计流程如图 2 1 开始 开始界面 输入操作指令 Choose 1 建立文本文件2 单词计数3 单词定位4 退出程序其他输入 1 23 4 其他 结束 图 2 1 程序流程图 吕超 文本文件单词的检索与计数 第 页 共 25 页 串匹配设计流程如图 2 2 开始 S 母串 T 子串 K 给定位置 定义i为S的下标 定义j为T的下标 S Ss i T Ss j i j Y N i i j 1 J 0 j T length return i T length Y return 1 N 结束 图 2 2 程序流程图 吕超 文本文件单词的检索与计数 第 页 共 25 页 3 详细实现详细实现 3 1 数据结构体设计数据结构体设计 定义结构体定义结构体 typedef struct char Ss MaxStrSize Ss 是一个可容纳 1024 个字符的字符数组 int length SeqString 定义顺序串类型 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 检索单词出现在文本文件中的行号 位置及在该行中出现的次数 void SubStrInd 将文件字符串写入一个数组 调用给定为位置的串匹配 记录单词个数 出现的 位置 吕超 文本文件单词的检索与计数 第 页 共 25 页 3 3 函数分析函数分析 1 int PartPosition SeqString S SeqString T int k 本函数的作用是给定位置的串匹配 存在就返回子串的位置 不存在返回 1 int PartPosition SeqString S SeqString T int k int i j i k 1 j 0 while i S length else return 1 2 void CreateTextFile 本函数的作用是输入一个名称 建立文本文件 void CreateTextFile SeqString S char filename 10 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 吕超 文本文件单词的检索与计数 第 页 共 25 页 S length strlen S Ss fwrite 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 filename 20 int i 0 j k while true printf 输入文本文件名 scanf s filename 吕超 文本文件单词的检索与计数 第 页 共 25 页 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 k S length 1 j PartPosition S T k if j 0 break else 吕超 文本文件单词的检索与计数 第 页 共 25 页 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 SubStrInd FILE fp SeqString S T char filename 10 int i j k line m int Sub 20 while true printf 输入文本文件名 scanf s filename 吕超 文本文件单词的检索与计数 第 页 共 25 页 fp fopen filename r if fp NULL printf 输入文件名不存在 n else break printf 输入需要检索的单词 scanf s T Ss T length strlen T Ss line 0 while feof fp memset S Ss 0 MaxStrSize fgets S Ss MaxStrSize fp S length strlen S Ss line k 1 i 0 while k S length 1 j PartPosition S T k 吕超 文本文件单词的检索与计数 第 页 共 25 页 if j0 printf 行号 d 次数 d 位置分别为 line i for m 1 m i m printf 4d Sub m printf n 吕超 文本文件单词的检索与计数 第 页 共 25 页 4 运行环境与结果运行环境与结果 4 1 运行环境运行环境 系统开发平台为 Windows8 程序设计工具使用 codeblocks 13 12 程序设计语言采用 C 语言 程序完成后 对程序进行调试与改进 4 2 运行结果运行结果 4 2 1 进入程序时的菜单 供选择 如图 4 1 图 4 1 开始菜单 吕超 文本文件单词的检索与计数 第 页 共 25 页 4 2 2 选择 1 输入名称和数据 如图 4 2 图 4 2 输入数据 4 2 3 选择 2 输入要查找的单词 输出单词出现的次数 如图 4 3 图 4 3 查找单词的次数 吕超 文本文件单词的检索与计数 第 页 共 25 页 4 2 4 选择 4 输入要查找的单词 输出单词的位置 如图 4 4 图 4 4 查找单词的位置 4 2 5 结束程序 如图 4 5 图 4 5 结束程序 吕超 文本文件单词的检索与计数 第 页 共 25 页 5 结束语 一周的奋斗之后 这次数据结构的课程设计终于做完了 通过这次设计我们也着实 又感受了一次编程的乐趣 从中也学到了不少知识 感受最深的一点是 以前用编程 只是注重如何编写函数能够完成所需要的功能 似乎 没有明确的战术 只是凭单纯的意识和简单的语句来堆砌出一段程序 现在编程感觉完 全不同了 在编写一个程序之前 先对这个课程设计进行了一下分析 将每个要求都花 了一下算法流程图 使得自己的思路更加的清晰了 然后进行编程 不断的在电脑上调 试程序 终于完成了此次的课程设计 另外 我还体会到深刻理解数据结构的重要性 只有真正理解这样定义数据类型的 好处 才能用好这样一种数据结构 了解典型数据结构的性质是非常有用的 它往往是 编写程序的关键 本次实验的具体分工为伍澳奇负责 PartPosition 函数和主函数的设计 吕超负责 SubStrCount 函数的设计 李成负责 SubStrInd 函数的设计 设计报告由我们共同讨 论总结而来 通过这次合作让我们学习了软件开发中的多人合作开发的好处和需要注意 的东西 通过这次课程设计逐渐提高了自己的程序设计和调试能力 我以前对算法一直很害怕 总是看不明白究竟这程序中间的过程是怎么进行的 在这次实验中我终于克服了这一障 碍 一遍遍在心中自己默默的走 终于弄明白了 真的是功夫不负有心人啊 这次试验也让我看到了自己的不足 还是不太用模板类 还有许多关于 C 语言的一些比 较具体的东西还不太懂 需要进一步了解 这次试验还让我意识到只有不断的在电脑上 调试程序 自己的水平才能得到提高 我会继续我们的兴趣编写程序的 相信在越来越 多的尝试之后 自己会不断进步和提高 吕超 文本文件单词的检索与计数 第 页 共 25 页 参考文献 1 严蔚敏 吴伟名 数据结构 C 语言版 北京 清华大学出版社 2007 2 谭浩强 C 语言程序设计 第四版 北京 清华大学出版社 2010 3 Mark Allen Weiss 著 冯舜玺译 数据结构与算法分析 C 语言描述 北京 机械工业出 版社 2004 吕超 文本文件单词的检索与计数 第 页 共 25 页 附录 结构化设计源程序清单附录 结构化设计源程序清单 程序名称 wen C 程序功能 采用结构化方法设计程序 实现单词的检索与计数 程序作者 吕超 最后修改日期 2014 7 1 include include include define MaxStrSize 2048 根据用户需要自己定义大小 define true 1 定义 true 1 define false 0 定义 false 0 typedef struct char Ss MaxStrSize Ss 是一个可容纳 1024 个字符的字符数组 int length SeqString 定义顺序串类型 函数声明 void CreateTextFile void SubStrCount void SubStrInd 主函数 int main void CreateTextFile 吕超 文本文件单词的检索与计数 第 页 共 25 页 void SubStrCount void SubStrInd char choose printf n printf 文本文件单词的检索与计数 n printf n printf 1 建立文本文件 n printf 2 单词的计数 n printf 3 单词的定位 n printf 4 退出程序 n printf n while true 只能输入数字 1 4 输入其他重新 输入 printf n printf 请选择 1 4 scanf c if choose 1 CreateTextFile else if choose 2 SubStrCount else if choose 3 SubStrInd else if choose 4 吕超 文本文件单词的检索与计数 第 页 共 25 页 printf 程序结束 正在退出 return 0 else printf 选择错误 请重新选 n 给定位置的串匹配 int PartPosition SeqString S SeqString T int k S 为母串 T 为子串 int i j i k 1 扫描 S 的下标 因为 S 中数组下 标是从 0 开始 串中序号相差 1 j 0 扫描 T 的开始下标 while i S length 表示 S 中存在 T 返回其起始位置 else return 1 表示 S 中不存在 T 返回 1 建立文本文件函数 void CreateTextFile SeqString S char filename 10 flags flags Yes 或是 No 的标志 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 printf 结束输入吗 吕超 文本文件单词的检索与计数 第 页 共 25 页 flags getchar fflush stdin 清理缓存 fclose fp 关闭文件 printf 建立文件结束 n 文本文件单词计数函数 void SubStrCount FILE fp NULL SeqString S T 定义两个变量 S 为母串 T 为子串 char filename 20 int i 0 j k while true 对 filename 进行判断是否存在 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 扫描整个文本文件 吕超 文本文件单词的检索与计数 第 页 共 25 页 memset S Ss 0 MaxStrSize fgets S Ss MaxStrSize fp 将 fp 以

温馨提示

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

评论

0/150

提交评论