PAT-乙级-1042.字符统计

雨燕双飞 提交于 2020-02-01 05:07:16

题目

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

e 7

解法

要点

  • 输入字符串 :可以输入空格 getline(cin,s);
  • 利用数组存储出现的次数
  • 求字符对应的十进制:s[i]-NULL;
#include <iostream> 
#include <string>
#include <cctype>
#include <stdio.h>
using namespace std;
int main()
{
	string s;
	getline(cin,s);//输入,不能用cin 
	int num[128]={0};// ASCII表对应的十进制是数组下标 
	for(int i=0;i<s.size();i++)
	{
		if(isalpha(s[i]))//判断是否是字母 
		{
			s[i]=tolower(s[i]);//转换为小写 
			num[s[i]-NULL]++;//注意null 
		}
	}
	int max=-1,mp=-1;//求最大次数的字母 
	for(int i=0;i<127;i++)
	{
		if(max<num[i])
		{
			max=num[i];
			mp=i;
		}
	}
	printf("%c %d",mp,max);//输出 
	return 0;	
} 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!