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\n", r[i].c, r[i].num);
printf("---\n");
}
return 0;
}
转载于:https://www.cnblogs.com/RootVount/p/10969506.html
相关资源:JAVA上百实例源码以及开源项目