如何统计出一篇文章出现的文字个数? (中级) 使用std::vector

 

 1/* 
 2(C) OOMusou 2006 http://oomusou.cnblogs.com
 3
 4Filename    : CountRepeatedWordByVector.cpp
 5Compiler    : Visual C++ 8.0
 6Description : Demo how to count repeated words by vector
 7Release     : 11/16/2006
 8*/

 9
10#include <iostream>
11#include <fstream>
12#include <cctype>
13#include <string>
14#include <vector>
15#include <algorithm>
16
17void repeatedWords(std::string);
18
19int main() {
20  std::string fileName("textfile.txt");
21  repeatedWords(fileName);
22
23  return 0;
24}

25
26void repeatedWords(std::string fileName) {
27
28  std::ifstream infile(fileName.c_str());
29
30  if (!infile) {
31    std::cout << "Read error!!" << std::endl;
32
33    return;
34  }

35  
36  std::vector<std::string> wordsVec;
37
38  for(std::string word, newWord; infile >> word; newWord = ""{
39    for(std::string::iterator iter = word.begin();
40      iter != word.end(); ++iter) {
41
42        if (!ispunct(*iter)) {
43          newWord.push_back(tolower(*iter));
44        }

45     }

46     
47     wordsVec.push_back(newWord);
48  }

49
50  infile.close();
51
52  // unique_copy output vector must be initialized first
53  std::vector<std::string> uniqueWordsVec(wordsVec.size());
54  // Must sort before using unique_copy
55  sort(wordsVec.begin(), wordsVec.end());
56  // unique_copy algorithm to uniqueWordsVec
57  std::vector<std::string>::const_iterator endIter = unique_copy(wordsVec.begin(), wordsVec.end(), uniqueWordsVec.begin());
58
59  for(std::vector<std::string>::const_iterator iter = uniqueWordsVec.begin(); iter != endIter; ++iter) {
60      // count algorithm to count
61      std::cout << "The Word '" << *iter << "' Occurrence:" << (size_t)count(wordsVec.begin(), wordsVec.end(),*iter) << " times" << std::endl;
62  }

63}

posted on 2006-11-16 10:07  真 OO无双  阅读(763)  评论(2)    收藏  举报

导航