题目描述
题目描述
给定一个字符串 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; }