【C++题解】字符统计

P a r t Part Part 1 1 1 读题

题目描述

刚上一年级的下头男 w h y why why看到了一篇英文文章,他并不关心这篇文章的具体内容是什么(因为看不懂),但是他对于英文字符的出现次数很感兴趣,因为这篇文章太长了,所以下头男 w h y why why想请你帮忙,统计出哪些小写英文字符出现次数最多。

输入格式

输入共一行,有若干个单词,保证单词均由小写英文字母构成。

输出格式

输出共一行,由若干个小写英文字母构成,且必须按照字典序升序输出。

输入样例1

csp is coming

输出样例1

cis

输入样例2

noip is next to csp

输出样例2

inopst

数据范围与提示

对于 50 % 50\% 50%的数据, 1 ≤ ∑ ∣ S i ∣ ≤ 10 1≤∑|S_i|≤10 1Si10,且输入中没有空格

对于 100 % 100\% 100%的数据, 1 ≤ ∑ ∣ S i ∣ ≤ 1 0 5 1≤∑|S_i|≤10^5 1Si105,保证所有单词均由小写英文字母构成

P a r t Part Part 2 2 2 思路

本题较为简易,只需要记录各个字母出现的值就可以了,但是我们要注意,本题对于后 50 % 50\% 50%的数据是有空格的,所以我们可以用 s c a n f ( scanf( scanf(   % c \ \%c  %c ) ) )或者 c i n . g e t l i n e cin.getline cin.getline或者 g e t l i n e getline getline来吞掉空格。

求出现的最大值大家自行参考下方代码哦!

小tip:大家可以先根据思路,写一下代码哦!

P a r t Part Part 3 3 3 代码

方法1:冒泡排序算数法

#include<bits/stdc++.h>
using namespace std;
char b[30],s[100005];
int a[30],m;
int main(){
	cin.getline(s,sizeof(s));
	for(int i=0;i<strlen(s);i++){
		char ch=s[i];
		a[ch-97]++;
	}
	for(int i=0;i<26;i++)b[i]=char(i+97);
	for(int i=0;i<26;i++){
		for(int j=0;j<26-i;j++){
			if(a[j]<a[j+1]){
				swap(a[j],a[j+1]);
				swap(b[j],b[j+1]);
			}
		}
	}
	for(int i=0;i<26;i++){
		if(a[i]==a[i+1])m++;
		else break;
	}
	for(int i=0;i<m+1;i++)cout<<b[i];
	return 0;
}

方法2:寻找最大值比较法

#include<bits/stdc++.h>
using namespace std;
string s;
int mx=-1,t[250];
int main(){
	getline(cin,s);
	for(int i=0;i<s.size();i++)t[s[i]]++;
	for(int i='a';i<='z';i++)if(t[i]>mx)mx=t[i]; 
	for(int i='a';i<='z';i++)if(t[i]==mx)cout<<char(i);
	return 0;
}

听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值