A.谍报分析
“八一三”淞沪抗战爆发后,*几次准备去上海前线视察和指挥作战。但都因为宁沪之间的铁路和公路遭到了敌军的严密封锁,狂轰滥炸,一直未能成行。
特科组织,其主要任务是保卫**的安全,了解和掌握敌方的动向。经过一段时间的监听,谍报组获取了敌方若干份密报,经过分析,发现了密文中频繁出现一些单词,情报人员试图从单词出现的次数中,推出敌军的行动计划。
请你编程,快速统计出频率高的前十个单词。
【输入】
密文是由英语单词(小写字母)组成,有若干段。单词之间由一个或多个空格分开。自然段之后可以用一个“,”或“.”表示结束。整个内容的单词数量不超过10000,不同的单词个数不超过500个。
【输出】
输出占10行,每行一个单词及出现的次数,中间一个空格。要求按频率降序输出,出现次数相同的单词,按字典序输出。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct haha
{
char a[];
int num;
}s[];
bool cmp(haha a,haha b) //排序
{
if(a.num==b.num)
return strcmp(a.a,b.a)<;
return a.num>b.num;
}
int main()
{
char b[];
int j=;
while(scanf("%s",b)!=EOF)
{
int temp=;
char c[];
memset(c,,sizeof(c));
int n=strlen(b);
strcpy(c,b);
if(b[n-]==','||b[n-]=='.')
c[n-]='\0';
for(int i=;i<j;i++)
{
if(strcmp(s[i].a,c)==)
{
temp=;
s[i].num++;
break;
}
}
if(temp==)
{
strcpy(s[j].a,c);
s[j].num=;
j++;
}
}
sort(s,s+j,cmp);
for(int i=;i<;i++)
printf("%s %d\n",s[i].a,s[i].num);
return ;
}