4498: 单词排排序

题目描述

题目描述

给定一个字符串 ss,为一篇包含“英文大小写字母”、“数字”、“空格”、“标点符号” 的文章。请统计除空格之外的每个字符的出现次数,并按照次数从高到低依次输出每种字符。出现次数相同的,按照字符的 ASCII 的大小,从小到大输出。

标点符号仅包含 !@#$%^&*()_+{}|:"<>?-=[]\;',./

输入格式

一行,即那篇文章。

输出格式

根据题目要求,按顺序输出每种出现的字符各一次。

输入1:

I have a apple, I have a pen, Uh, applepen!

输出1:

aep,hIlnv!U

输入2:

bbbaccaac,cc

输出2:

cab,

样例解释 1

出现次数分别为

a(6) e(6) p(6) ,(3) h(3) I(2) l(2) n(2) v(2) !(1) U(1)

数据规模与约定

对于 $100%的数据,的数据,|s|为为s的长度,保证的长度,保证1\le |s|\le 10^4,且至少包含一个非空格字符。−子任务1(30分):保证

  • 子任务 1(30 分):保证 ,且至少包含一个非空格字符。−子任务1(30分):保证s中仅包含小写英文字母。−子任务2(30分):保证
  • 子任务 2(30 分):保证 中仅包含小写英文字母。−子任务2(30分):保证s$ 中不包含标点符号。
  • 子任务 3(40 分):没有特殊限制。
    #include<bits/stdc++.h>
    using namespace std;
    int zd[200]; 
    bool b[200];
    int main(){
    	string s;
    	getline(cin,s,'\n');
    	for(int i=0;i<s.size();i++){
    		int a=s[i];
    		zd[a]++;
    		if(s[i]==' ')b[a]=1;
    	}
    	for(int i=0;i<=200;i++){
    		int maxx=0;
    		int temp=0;
    		for(int j=0;j<=200;j++){
    			if(zd[j]>maxx&&b[j]==0){
    				maxx=zd[j];
    				temp=j;
    			}
    		}
    		if(maxx==0)break;
    		cout<<char(temp);
    		b[temp]=1;
    	}
    
    	return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值