梦熊杯 --【五月份 -- 基础语法组】-- T1 -- 爬虫

题目描述

小梦要设计下一代的键盘,需要对字母按键重新排序,计划将出现频率最高的按键让食指来触发,而出现频率最低的按键让无名指来触发。小梦编写了一个爬虫程序,从网上爬下文章,并且自动分析其中各个字母出现的次数。

输入格式

一个没有空白字符的字符串。

输出格式

按照出现次数从高到低输出大写字母及其出现次数,注意不区分大小写,没有出现过的字母不需要输出。

样例

输入样例

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);
    }
}
*/

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值