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