1042 字符统计(20)(20 分)

1042 字符统计(20)(20 分)

请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

输入格式:

输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。

输出格式:

在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

输入样例:

This is a simple TEST.  There ARE numbers and other symbols 1&2&3...........

输出样例:

e 7

解题思路:定一个结构体数组,结构体的内容是一个字符和该字符的长度,先把所有的大写字母都换算成小写字母,计算其字符个数的方法是判断该字符是否重复,如果该字符第一次出现就让其长度为1,否则其长度+1,最后进行结构体排序。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1100; 
int a[N];
typedef struct stu
{
	char ch;
	int lenth;
}STU1;
STU1 stu[N];
bool cmp(STU1 a,STU1 b)    //结构体排序 
{
	if(a.lenth!=b.lenth)   //长度由大到小 
	{
		return a.lenth>b.lenth;
	}
	else if(a.ch!=b.ch)     //字典序由小到大 
	{
		return a.ch<b.ch;
	}
}
int main()
{
	char ch;
	int i,n=128;
	while(ch=getchar(), ch!='\n')
	{
		if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))   //只对大小写字母进行操作 
		{
			if(ch>='A'&&ch<='Z')          //把所有的大写字母转换成小写字母 
			{
				ch=ch+32;
			}
			if(a[ch]==0)
			{
				a[ch]=1;                 //如果字符第一次出现,其长度等于1 
				stu[ch].ch=ch;
				stu[ch].lenth=1;
			}
			else                        //非第一次出现,长度+1 
			{
				stu[ch].lenth++;
			}
		}
	}
	sort(stu,stu+n,cmp);             //结构体排序 
	cout<<stu[0].ch<<" "<<stu[0].lenth;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值