#include <iostream>
#include <vector>
#include <string>
using namespace std;
template <typename T>
istream& operator>>(istream& is, vector<T>& vec)
{
T temp;
while (is >> temp)
vec.push_back(temp);
return is;
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& vec)
{
typename vector<T>::const_iterator first = vec.begin();
while (first != vec.end())
os << *first++ << " ";
os << endl;
return os;
}
struct WordCount {
string word;
int count;
};
// 重载WordCount的<<操作符
ostream& operator<<(ostream& os, const WordCount& value)
{
os << value.word << ":" << value.count;
return os;
}
// 重载WordCount与string的==操作符
bool operator==(const WordCount& lhs, const string& rhs)
{
return lhs.word == rhs;
}
// 在WordCount数组中查找指定的单词所在元素位置
template <typename InputIterator>
InputIterator find_word(InputIterator first, InputIterator last,
const string& value)
{
while (first != last && !(*first == value))
++first;
return first;
}
// 统计words数组中每个单词出现的次数,存入result数组中
void word_count(const vector<string>& words,
vector<WordCount>& result)
{
vector<string>::const_iterator iter = words.begin();
for (; iter != words.end(); ++iter) { // 遍历单词表
vector<WordCount>::iterator it = find_word(result.begin(), result.end(), *iter);
if (it == result.end()) { // 结果数组中不存在该单词
WordCount temp;
temp.count = 1;
temp.word = *iter;
result.push_back(temp);
}
else // 结果数组中已存在该单词,计数器加1
++(it->count);
}
}
int main()
{
vector<string> words;
cin >> words; // Ctrl-Z(eof)结束输入
vector<WordCount> vec;
word_count(words, vec);
cout << vec;
Sleep(100000);
return 0;
}