文本文件单词的检索与计数(实验准备与设计)

文本文件单词的检索与计数(实验准备)
一、实验内容
• 文本文件中每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写,统计给定单词在文本文件中出现的总次数,检索输出的某个单词出现在文本中的行号、在该行中出现的位置。
• 设计数据量大的文本,进行子串的查询处理,分析算法运行的时间效率,对所有输出的匹配位置结果进行验证,以证明算法设计和实现的正确性。
• 用朴素模式匹配算法或KMP算法实现字符串定位;
• 可正确读取,保存文本;
二编程语言
C++
三、项目设计思路

  1. 朴素模式匹配算法
    1)概念简述
    子串定位运算,在主串中找出子串出现的位置。
    在串匹配中,将主串 S 称为目标(串),子串 T 称为模式(串)。如果在主串 S 中能够找到子串 T, 则称匹配成功,返回 第一个 和 子串 T 中 第一个字符 相等 的 字符 在主串 S 中的 序号,否则,称匹配失败,返回 0。
    2)算法步骤
    假设我们要从主串s="goodgoogle"找到t="google"这个子串的位置,我们需要下列步骤
    1、主串s的第1位开始,s与t前三个字符都匹配成功,第四个字符不匹配(竖线表示相等,闪电状弯折表示不想等)
    2、主串s的第2位开始,匹配失败
    3、主串s的第3位开始,匹配失败
    4、主串s的第4位开始,匹配失败
    5、主串s的第5位开始,s与t,6个字符全部匹配成功
    对主串的每一个字符作子串开头,要与匹配的字符串进行匹配。对主串作大循环,每一个字符开头作t长度的小循环,直到匹配成功或者全部遍历完为止。
    2、设计功能的实现
    2.1朴素的模式匹配算法
    算法思路:对于主串的每一个字符作为子串的开头,与要匹配的字符串进行匹配,对主串做最大的循环,每个字符开头都做子串长度的小循环,直到匹配成功或者全部遍历完成为止。
    更具体地说:设有三个指针i,j,k,用i指示主串S每次开始比较的位置;指
    针 j,k分别指示主串S和模式串T中当前正在等待比较的字符位置;一开始从主串S的第一个字符(i=0;j=1)和模式T的第一个字符(k=0)比较,若相等,则继续逐个比较后续字符(j++,k++)。否则从主串的下一个字符(i++)起再重新和模式串(j=0)的字符开始比较。依此类推,直到模式T中的所有字符都比较完,而且一直相等,则称匹配成功,并返回位置 i;否则返回-1,表示匹配失败。
    2.2给定单词的计数
    该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词出现的次数。
    其实现过程如下:
    (1)输入要检索的文本文件名,打开相应的文件;
    (2)输入要检索统计的单词;
    (3)循环读文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。具体描述如下:While (不是文件结束)读入一行并到串中;求出串长度;模式匹配函数计数;
    (4)关闭文件,输出统计结果。
    2.3检索单词在文本文件中行号、次数及其位置
    这个设计要求与上一个类似,但要相对复杂一些。其实现过程描述如下:
    (1)输入要检索的文本文件名,打开相应的文件;
    (2)输入要检索统计的单词;
    (3)行计数器置初值0;(4)while(不是文件结束){读入一行到指定串中;求出串长度;行单词计数器置0;调用模式匹配函数匹配单词定位、该行匹配单词计数;行号计数器加1;If(行单词计数器!=0)输出行号、该行有匹配单词的个数以及相应的位置;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值