当前位置:   article > 正文

程序员面试金典——解题总结: 9.17中等难题 17.9设计一个方法,找出任意指定单词在一本书中的出现频率_3.编程统计《葛底斯堡演说》中每个单词出现的次数。 要求:打开文件,处理其中

3.编程统计《葛底斯堡演说》中每个单词出现的次数。 要求:打开文件,处理其中
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <string.h>
  5. #include <hash_map>//hash_map
  6. #include <algorithm>
  7. using namespace std;
  8. /*
  9. 问题:设计一个方法,找出任意指定单词在一本书中的出现频率
  10. 分析:这个明显是信息检索中倒排索引的使用。倒排索引需要使用链表数组和哈希来做。
  11. 但是可能存在一个问题:假设单词1和单词2通过哈希函数得到的哈希值相同,那么:获取单词出现次数的时候,需要比较
  12. 对于Java而言可以使用HashTable,对于Python,它并没有自己的哈希函数,所以需要自己写。
  13. 对于C++,存在
  14. 关键:
  15. 1 hash_map<string , int> wordToTimes;
  16. #include <hash_map>
  17. 2 简单的题目一定要对输入参数检查
  18. //易错,一定做判空处理
  19. if(word.empty() || wordToTimes.empty())
  20. {
  21. return 0;
  22. }
  23. transform(word.begin() , word.end() , word.begin() , tolower);//先转小写后再查询
  24. 3
  25. #include <algorithm>
  26. //注意信息检索中全部存放转换为小写的
  27. transform(word.begin() , word.end() , word.begin() , tolower);
  28. */
  29. hash_map<string , int> generateWordTable(vector<string>& words )
  30. {
  31. string word;
  32. hash_map<string , int> wordToTimes;
  33. for(vector<string>::iterator it = words.begin() ; it != words.end() ; it++)
  34. {
  35. word = *it;
  36. //注意信息检索中全部存放转换为小写的
  37. transform(word.begin() , word.end() , word.begin() , tolower);
  38. hash_map<string , int>::iterator itFind = wordToTimes.find(word);
  39. if( itFind != wordToTimes.end())
  40. {
  41. itFind->second++;
  42. }
  43. else
  44. {
  45. wordToTimes.insert(pair<string , int>(word , 1));
  46. }
  47. }
  48. return wordToTimes;
  49. }
  50. int getFrequency(hash_map<string , int>& wordToTimes , string word)
  51. {
  52. //易错,一定做判空处理
  53. if(word.empty() || wordToTimes.empty())
  54. {
  55. return 0;
  56. }
  57. transform(word.begin() , word.end() , word.begin() , tolower);//先转小写后再查询
  58. hash_map<string , int>::iterator itFind = wordToTimes.find(word);
  59. if( itFind != wordToTimes.end())
  60. {
  61. return itFind->second;
  62. }
  63. else
  64. {
  65. return 0;
  66. }
  67. }
  68. int main(int argc , char* argv[])
  69. {
  70. getchar();
  71. return 0;
  72. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/695400
推荐阅读
相关标签
  

闽ICP备14008679号