1. 程式人生 > 其它 >7-3 詞頻統計 (30 分)

7-3 詞頻統計 (30 分)

思路

使用map比較簡單,使用java更簡單

題解

#include<bits/stdc++.h>

using namespace std;

map<string,int> M;

bool cmp(pair<string,int> a,pair<string,int>b)
{
    if(a.second==b.second) return a.first<b.first;
    return a.second>b.second;
}

int main()
{
	char c;
	string str; 
	while(scanf("%c",&c)!=EOF)
	{
		if((c>='a'&&c<='z')||(c>='0'&&c<='9')||(c>='A'&&c<='Z')||(c=='_'))
		{
			if(c>='A'&&c<='Z') //將大寫字母轉換為小寫
			{
			   c=c-'A'+'a';
			}
			if(str.length()<15) //只要沒超過15個字母這個單詞就可以繼續存
			{
				str+=c;
			}
		}
		else if(c=='#'||str.length()>0)
		{
			if(str.length()>0){
				M[str]++;
			}
			str.clear();
			if(c=='#')break;
		}
	}

	vector<pair<string,int> > v(M.begin(),M.end());
	sort(v.begin(),v.end(),cmp); //排序
	int count=v.size()*0.1;
	cout<<v.size()<<endl;
	for(int i=0;i<count;i++)
	{
		cout<<v[i].second<<":"<<v[i].first<<endl;
	}
    return 0;
}