题目描述
小梦要设计下一代的键盘,需要对字母按键重新排序,计划将出现频率最高的按键让食指来触发,而出现频率最低的按键让无名指来触发。小梦编写了一个爬虫程序,从网上爬下文章,并且自动分析其中各个字母出现的次数。
输入格式
一个没有空白字符的字符串。
输出格式
按照出现次数从高到低输出大写字母及其出现次数,注意不区分大小写,没有出现过的字母不需要输出。
样例
输入样例
123_HelloWorld_C++
输出样例
L 3
O 2
C 1
D 1
E 1
H 1
R 1
W 1
数据范围与提示
-
30%的数据,仅包含大写字母,长度不超过25。
-
另30%的数据,字符串⻓度不大于25。
-
100%的数据,字符串⻓度不大于300。
代码
#include<bits/stdc++.h>
using namespace std;
string s;//3.求出字符串长度
struct node{//1.node字符节点
int x,id;
}a[26];//2,。放到一个数组里
bool cmp(node x,node y){
if(x.x==y.x){
return x.id<y.id;
}
return x.x>y.x;
}
int main(){
cin>>s;
for(int i=0;i<26;i++){//4.循环遍历每个字符
a[i].id=i;
}
for(int i=0;i<s.size();i++){
if('A'<=s[i]&&s[i]<='Z'){//5.如果是小写字符就把他变成大写字符
a[s[i]-'A'].x++;//6.并且重新赋值给s[i]
}
if('a'<=s[i]&&s[i]<='z'){
a[s[i]-'a'].x++;
}
}//7.然后存到tg的桶里
//8.通过桶知道字符出现了几次
sort(a,a+26,cmp);//11.sort排序
for(int i=0;i<26&&a[i].x!=0;i++){//9.遍历桶,如果桶不等于0,代表桶里有值
cout<<char(a[i].id+'A')<<" " <<a[i].x <<'\n';//12.输出
}//10.a[i]=阿卡码表加上A存到结构体数组里z对应的出现的次数time也存到桶里
return 0;
}
/*给你一个字符串,包括特殊字符,数字字符,
字母字符只拿出字母字符,找出每个字母字符出
现的次数,按输出端次数从大到小输出,出现次
数相同按字符的顺序输出,输出他对应出现的次数
#include <bits/stdc++.h>
using namespace std;
string s;
struct node {
int x, id;
} a[26];
bool cmp(node x, node y) {
if (x.x == y.x)
return x.id < y.id;
return x.x > y.x;
}
int main() {
cin >> s;
for (int i = 0; i < 26; i++) a[i].id = i;
for (int i = 0; i < s.size(); i++) {
if ('A' <= s[i] && s[i] <= 'Z')
a[s[i] - 'A'].x++;
if ('a' <= s[i] && s[i] <= 'z')
a[s[i] - 'a'].x++;
}
sort(a, a + 26, cmp);
for (int i = 0; i < 26 && a[i].x != 0; i++) cout << char(a[i].id + 'A') << " " << a[i].x << endl;
return 0;
}
#include <bits/stdc++.h>
#define int long long
using namespace std;
char a[100053];
char ch[234667];
int b[274543], cnt;
char t;
struct node {
int k;
char bh;
} f[201254];
bool cmp(node x, node y) {
if (x.k == y.k)
return x.bh < y.bh;
return x.k > y.k;
}
signed main() {
cin >> a;
int len = strlen(a);
for (int i = 0; i < 26; i++) {
f[i].bh = i + 'A';
}
for (int i = 0; i < len; i++) {
if (a[i] >= 'A' && a[i] <= 'Z')
f[a[i] - 'A'].k++;
else if (a[i] >= 'a' && a[i] <= 'z')
f[a[i] - 'a'].k++;
}
sort(f, f + 26, cmp);
for (int i = 0; i < 26; i++) {
if (f[i].k != 0) {
cout << f[i].bh << " " << f[i].k << endl;
}
}
}
#include <bits/stdc++.h>
using namespace std;
struct node {
int sum;
char xuduang;
} a[30];
string xdy;
bool cmp(node a, node b) {
if (a.sum == b.sum)
return a.xuduang < b.xuduang;
return a.sum > b.sum;
}
signed main() {
cin >> xdy;
for (int i = 0; i < xdy.size(); i++) {
int kk = xdy[i] - 'A' + 1;
if (xdy[i] >= 'A' && xdy[i] <= 'Z')
a[kk].sum++;
else if (xdy[i] >= 'a' && xdy[i] <= 'z') {
kk = xdy[i] - 'a' + 1;
a[kk].sum++;
}
}
for (int i = 1; i <= 26; i++) a[i].xuduang = char('A' - 1 + i);
sort(a + 1, a + 27, cmp);
for (int i = 1; i <= 26; i++) {
if (a[i].sum)
printf("%c %d\n", a[i].xuduang, a[i].sum);
}
}
*/