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