#题目描述
你是计蒜大学英语文学项目组的实习生。项目组的专家希望你设计一种数据结构能快速地统计出文学作品中不同单词出现的频率与历史年代的关系。很明显你需要实现一个哈希表,这次的作业解法十分开放,你可以发挥自己的聪明才智设计哈希函数和哈希表。本次作业涉及到了文件指针的概念,如果你不了解可以先学习之前的引导章节。
#第一部分
你需要实现一个哈希函数,以及一个哈希表的类。这个表可以用线性探测法规避冲突,也可以使用不改变函数签名的其它方法规避冲突,只要遵守题目中的约定。这里给你提供一些哈希函数的设计思路 Wikipedia: Hash Function。每个Node对象中含有一个pair,其中第一个元素是一个单词的字符串,第二个元素是一个整数型,表示词频。
#第二部分
你需要利用之前写的哈希表,实现一个Dict类,实现一个统计文件词频率和单词总数的软件。你需要自行从文件指针input_file中读取、解析字符,然后将解析出的单词加入Dict。本题中单词被定义为由字母组成的字符串。比如word,blah就是单词,而3d就不是单词。句子I used to be a coconut.可以被解析成六个单词I,used,to,be,a,coconut。同时,所有字母都会被转为小写,比如BlaH会被录入为blah。isalpha()和tolower()可能会对你分析字符串很有帮助。
在 UNIX 系统中,当一个文件被读取完成(或者读取中出现故障),系统会向文件指针传递一个 -1−1 表示 End of File(文件结束),简称 EOF。所以当你从文件指针中读取字符的时候,如果遇到 EOF,你应当停止读取,然后调用Dict类中的打印函数将已采集的数据打印出来。