#if _MSVC_VER <= 1200
#pragma warning( disable: 4786)//消除vc6對模板支持不好的警告
#endif
#pragma warning( disable: 4996)//消除.net對不安全數據的警告
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <functional>
#include <stdio.h>
using namespace std;
typedef pair<string,int> MyData;
template<class _Ty>
struct MySort
: public binary_function<_Ty, _Ty, bool>
{ // functor for operator>
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator> to operands
return _Left.second>_Right.second;
}
};
bool FindKeyWord(vector<MyData> &vecWord,string &strKey)
{
vector<MyData>::iterator iter;
for(iter=vecWord.begin();iter!=vecWord.end();iter++)
{
if (iter->first==strKey)
{
iter->second++;
return true;
}
}
return false;
}
bool SetDataIntovector(const char * szWrod,vector<MyData> &vecWord)
{
size_t i;
string strSubWord;
size_t nLen=strlen(szWrod);
if (szWrod[0]!=' ') i=0;
else
for(i=0;i<nLen;i++) if (szWrod[i]!=' ') break;
if (i==nLen) return false;//居然壹個字符都沒有
size_t nBegin=i;
size_t nEnd;
string strTemp=szWrod;
for(i=nBegin;i<nLen;i++)
{
nEnd=strTemp.find(' ',i+1);
if (nEnd==-1) nEnd=nLen;
strSubWord.assign(szWrod+i,nEnd-i);
if (!FindKeyWord(vecWord,strSubWord)) vecWord.push_back(MyData(strSubWord,1));//找不到關鍵字則添加
i=nEnd;
}
return true;
}
int main()
{
vector<MyData> vecData;
char szData[4048];//記住妳輸入的英文字符不能大於4048
cout<<"下面輸入英文語句:"<<endl;
gets(szData);
if (!SetDataIntovector(szData,vecData))//把數據放入vector
{
cout<<"居然壹個字符也不輸!"<<endl;
return 0;
}
sort(vecData.begin(),vecData.end(),MySort<MyData>());
vector<MyData>::iterator iter;
if (vecData.size()<5)//關鍵字少於5的
{
for(iter=vecData.begin();iter!=vecData.end();iter++)
cout<<"關鍵字:"<<iter->first<<"\t\t出現概率:"<<iter->second<<endl;
}
else
for(iter=vecData.begin();iter<vecData.begin()+5;iter++)
cout<<"關鍵字:"<<iter->first<<"\t\t出現概率:"<<iter->second<<endl;
return 0;
}