/*
实现功能:将输入的单词转换为小写,并进行排序
以及输出单词出现的频率,原来也用Hash表和二叉排序树
实现过此类功能,STL用起来更简便
*/
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
#include<cctype>
using namespace std;
char toLower(char ch)//tolower()函数定义为int tolower(int)
{ //为了使其与char匹配所以进行了一下转换
return tolower(ch);
}
string& ToLower(string &s)
{
transform(s.begin(),s.end(),s.begin(),toLower);
return s;
}
int main(int argc,char *argv[])
{
vector<string> word;
string input;
cout<<"Enter words(q to quit):"<<endl;
while(cin>>input&&input!="q")
word.push_back(input);
set<string> wordset;//把单词放进集合,并将其转换成小写
transform(word.begin(),word.end(),
insert_iterator<set<string> >(wordset,wordset.begin()),ToLower);
map<string,int> wordmap;//把单词及其频率放进map中
set<string>::iterator it;
for(it=wordset.begin();it!=wordset.end();it++)
wordmap[*it]=count(word.begin(),word.end(),*it);
map<string,int>::iterator si;//输出
for(si=wordmap.begin();si!=wordmap.end();si++)
cout<<si->first<<":"<<si->second<<endl;
return 0;
}
原文:http://blog.csdn.net/cstopcoder/article/details/20768527