从文本文件中读入若干个单词将频率高的输出到另一个文件中

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivi_and_qiao/article/details/87925203

题目描述:

文本文件input.txt由若干英文单词和分隔符(空格,回车,换行)构成

要求:
根据如下说明统计不同单词出现的次数(频度)。将统计结果按出现频度从高到低排序,
并将出现频度大于5的单词及其频度输出到文件output.txt中。文件格式如下所示:

    to, 10
    our, 8
    home, 5
    yes, 5

说明:
(1) 多个连续的分隔符被视为一个分隔符。
(2) 单词大小写敏感。
(3) 每个单词的长度不超过20个字符。
(4) 单词的数量未知。如使用定义静态大数组的方式来统计,将被扣除5分

题目分析:

1.从文件中读出单词
(2.建立单词+词频的链表),故要用到统计词频并建立word-num链表的函数construct
[1] 从文件依次读入字符,把它放到这个单词的数组里,数组下标+1,当这个字符既不属于大写字母又不属于小写字母时,
说明这个单词已结束,以上那个数组里的字符就是这个单词的全部内容,并给这个单词的字符串数组里添加
‘\0’标志此单词的结束
[2] 然后把这个单词的字符串数组送入统计词频的函数(加入到dicword链表里),
使得tempword[i]数组里的i重新归0,重新统计下一个字符
[3] 当上一个单词已经结束,读下一个新字符时发现是间隔符(空格,\n,\r时),它也不属于大写字母不属于小写字母,
此时直接把’\0’赋值给过渡作用的字符串数组tempword[0],此时i=0,这说明现在这个肯定不是单词,
所以直接跳出本轮循环,重新读入下一个字符
[4] 直到读到文件里的字符串结束符EOF,文件才读完了
[5] 关闭文件
2.建立单词+词频dicword的链表
[1] 传入某个单词的字符串数组(单词内容)
[2] 传出更新后(更新了词频或词频+单词内容)的dicword链表
[3] 一开始,dicword链表头指针指向空,开辟一个新的链表结点,把传入的这个wordtemp字符串数组内容复制
给这个新链表结点的word域,更新其count域为1,next域指向空.
将更新后的链表传出到(从文件中读单词函数),告诉他可以读下一个字符,即进行1中的[3]步骤
[4] 当dicword链表头指针不再指向空时,说明此链表已经有单词元素了.把传入的这个wordtemp字符串数组从链表
开始结点依次比较:
【如果这个wordtemp的内容和这个结点的word域完全相同,就停下来,不用比较了,而是更新这个结点的count域(+1)】;
【如果不同,就和链表下一个结点的word域比较,直到和链表全部元素比过之后,发现链表里没有和它相同的,就为
这个新单词建立新结点,更新其count为1,使其next为空,把这个新结点加入到刚才链表dicword的尾部】
将更新后的链表传出到(从文件中读单词函数),告诉他可以读下一个字符,即进行1中的[3]步骤

代码下载:

从文本文件中读入若干个单词将频率高的输出到另一个文件中C语言实现源代码下载

猜你喜欢

转载自blog.csdn.net/vivi_and_qiao/article/details/87925203