百度之星 2005年 初赛题目三
第三题(共四题 100 分):字符串替换( 30 分)
题目描述:请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。
输入数据:程序读入已被命名为 text.txt 和 dict.txt 的两个输入数据文本文件, text.txt 为一个包含大量字符串(含中文)的文本,以 whitespace 为分隔符; dict.txt 为表示字符串( s1 )与字符串( s2 )的对应关系的另一个文本(含中文),大约在 1 万行左右,每行两个字符串(即 s1 和 s2 ),用一个 \t 或空格分隔。 dict.txt 中各行的 s1 没有排序,并有可能有重复,这时以最后出现的那次 s1 所对应的 s2 为准。 text.txt 和 dict.txt 中的每个字符串都可能包含除 whitespace 之外的任何字符。 text.txt 中的字符串必须和 dict.txt 中的某 s1 完全匹配才能被替换。(为便于调试,您可下载测试 text.txt 和 dict.txt 文件,实际运行时我们会使用不同内容的输入文件。)
输出数据:在标准输出上打印 text.txt 被 dict.txt 替换后了的整个文本。
评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。
?
思路:
??? 首先,读取dict.txt内容,构建HashTable。鉴于“并有可能有重复,这时以最后出现的那次 s1 所对应的 s2 为准”,在添加到HashTable中是,如果已经存在,则覆盖原有的Value值,即可。
?? 然后读取text.txt文件,使用strtok拆分
??????? 对每一个字符串进行处理,然后在HashTable中寻找是否存在
??????? 存在,则,替换输出到新的一个文件中
????????不存在,则,不替换输出到新的一个文件中
?? 直至完成。
GHash.h
?
?
?该程序只是一个实现版本,很多东西还可以做出修改的
?比如读取文件时,可以采用内存映射,尤其对于大文件的读写来说更为合适
?
?
?
?
?
?