通过类来实现对指定文章的词频统计
以下代码将通过类来实现对指定文章的词频统计,并以指定格式输出.
大家自行测试,如有错误欢迎指正.
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <fstream> 5 #include <sstream> 6 #include <algorithm> 7 8 using std::cout; 9 using std::endl; 10 using std::string; 11 using std::vector; 12 using std::ifstream; 13 using std::ofstream; 14 using std::istringstream; 15 16 const int initCnt = 10000; 17 18 struct Record 19 { 20 string word; 21 int cnt; 22 }; 23 24 bool operator<(const Record & lhs,const Record & rhs) 25 { 26 return lhs.word < rhs.word; 27 } 28 29 class WordStastic 30 { 31 public: 32 WordStastic() 33 { 34 _dict.reserve(initCnt); 35 } 36 37 void readFile(const string & filename); 38 void writeFile(const string & filename); 39 40 private: 41 vector<Record> _dict; 42 }; 43 44 void WordStastic::readFile(const string & filename) 45 { 46 ifstream ifs(filename); 47 if(!ifs.good()) 48 { 49 cout << "Oops~" << endl; 50 return ; 51 } 52 53 string line; 54 while(getline(ifs,line)) 55 { 56 istringstream iss(line); 57 string word; 58 while(iss >> word) 59 { 60 vector<Record>::iterator it; 61 for(it = _dict.begin();it!=_dict.end();++it) 62 { 63 if(word == it->word) 64 { 65 ++(it->cnt); 66 break; 67 } 68 } 69 if(it==_dict.end()) 70 { 71 Record record; 72 record.word = word; 73 record.cnt = 1; 74 _dict.push_back(record); 75 } 76 } 77 } 78 ifs.close(); 79 std::sort(_dict.begin(),_dict.end()); 80 } 81 82 void WordStastic::writeFile(const string & filename) 83 { 84 ofstream ofs(filename); 85 if(!ofs.good()) 86 { 87 cout << "Oops!" << endl; 88 return ; 89 } 90 91 for(auto & elem : _dict) 92 { 93 ofs << elem.word << " " << elem.cnt << endl; 94 } 95 96 ofs.close(); 97 }