思路是先截取单词,通过map记录单词个数,再转存vector进行排序。

using namespace std;
typedef pair<string,int> Word;
bool cmp(Word w1,Word w2)
{
    return w1.second>w2.second;
}
int main()
{
    map<string,int> mp;
    string s;
    while(getline(cin,s))
    {
        for(int i=0,j=0;i<s.size();i++)
        {
            if(s[i]==' '||s[i]=='.')
            {
                string t=s.substr(j,i-j);
                if(isupper(t[0]))
                    t[0]=tolower(t[0]);
                j=i+1;
                mp[t]++;
            }
        }
        vector<Word> v(mp.begin(),mp.end());
        sort(v.begin(),v.end(),cmp);
        for(int i=0;i<v.size();i++)
            cout<<v[i].first<<":"<<v[i].second<<endl;
    }
    return 0;
}