SDNU 1106.字符统计器(水题)

Description

费了好长时间敲出的一篇论文,想不想知道其中敲了多少个字母?那么现在我们去写一个程序实现吧!

Input

输入有多行数据,每行数据不会超过10000个字符,同时我们保证,每行不会出现空格和TAB。

Output

对于每一行输入数据,按出现次数从大到小输出该字母和出现的次数,字母统一用大写字母表示,如果两个字母出现次数相同,按字母表的先后顺序输出,如果这个字母没有出现,不输出该字母。输出完该行所有字母的出现次数后,输出“---”。

Sample Input

Congqianyouzuoshan,
Shanshangyougemiao,
Miaomiaomiao~~

Sample Output

N 3
O 3
A 2
U 2
C 1
G 1
H 1
I 1
Q 1
S 1
Y 1
Z 1
---
A 3
G 2
H 2
N 2
O 2
S 2
E 1
I 1
M 1
U 1
Y 1
---
A 3
I 3
M 3
O 3
---
#include<bits/stdc++.h>
using namespace std;

struct node
{
    char c;
    int num;
}r[100+8];

bool cmp(node a, node b)
{
    if(a.num != b.num)return a.num>b.num;
    return a.c<b.c;
}

char s[10000+8];

int main()
{
//    for(int i = 65; i<91; i++)r[i].c = (char)i;
    while(gets(s))
    {
        for(int i = 65; i<91; i++)r[i].c = (char)i;
        for(int i = 0; i<100; i++)r[i].num = 0;
        int len = strlen(s);
        for(int i = 0; i<len; i++)
        {
            if(s[i] >= 'A' && s[i] <= 'Z')r[(int)s[i]].num++;
            if(s[i] >= 'a' && s[i] <= 'z')r[(int)s[i]-32].num++;
        }
        sort(r, r+91, cmp);
        for(int i = 0; r[i].num>0; i++)
            printf("%c %d
", r[i].c, r[i].num);
        printf("---
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/RootVount/p/10969506.html