题意:
给一个字符串,统计里面各个相邻的两个字符组成的字符串的出现频率。
思路:
水题,只是按行读入时要小心一点。用getchar()清空n后的多余空格,用fflush(stdin)会wa。
代码:
//poj 2569
//sepNINE
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;;
struct Node
{
string c;
int n;
}word[10000];
int cmp(Node a,Node b)
{
if(a.n!=b.n)
return a.n>b.n;
return a.c<b.c;
}
int main()
{
int n;
while(cin>>n&&n){
string a;
map<string,int> m;
getchar();
while(n--){
string b;
getline(cin,b);
a+=b;
}
int i,len=a.length();
map<string,int>::iterator iter;
for(i=0;i<len-1;++i){
string x;
x+=a[i];
x+=a[i+1];
if(m[x]==0)
m[x]=1;
else
++m[x];
}
int cnt=0;
for(iter=m.begin();iter!=m.end();++iter){
word[cnt].c=iter->first;
word[cnt].n=iter->second;
++cnt;
}
sort(word,word+cnt,cmp);
for(int i=0;i<5;++i){
cout<<word[i].c<<" "<<word[i].n<<" ";
printf("%lf\n",word[i].n*1.0/(len-1));
}
cout<<endl;
}
return 0;
}