天天看点

A.谍报分析

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 ;
}