1106.字符统计器 SDNUOJ1106

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 <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;

struct node
{
    char ch;
    int cnt;
}a[100];

int cmp(node a, node b)
{
    if(a.cnt != b.cnt)
        return a.cnt > b.cnt;
    else
        return a.ch < b.ch;
}

int main()
{
    char s[10005];
    while(gets(s))
    {
        for(int i = 65; i < 91; ++i)
        a[i].ch = char(i);
        int len = strlen(s);
        for(int i = 0; i < len; ++i )
        {
            if(s[i] >= 'A' && s[i] <= 'Z')
                a[int(s[i])].cnt++;
            if(s[i] >= 'a' && s[i] <= 'z')
                a[int(s[i]) - 32].cnt++;
        }
        sort(a, a + 91, cmp);
        for(int i = 0; a[i].cnt > 0; ++i)
            cout << a[i].ch << ' ' << a[i].cnt << '\n';
        for(int i = 0; i < 100; ++i)
            a[i].cnt = 0;
        cout << "---" << '\n';
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaobaole2018/article/details/85331960
今日推荐