PAT乙:1042 字符统计 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

This is a simple TEST. There ARE numbers and other symbols1&2&3…
输出样例:

e 7

思路:
我们把所有的字符全部转成小写,然后再统计,这样会方便很多。

这里将字母大写转化为小写的函数是 tolower(); 在文件 “cctype”(c++)中。
除此之外,我们用cin.get(数组名,数组大小);来输入任意大小的字符.

代码中,我将代码块分成了
1. 输入部分
2. 逻辑处理部分
3. 输出部分

#include<iostream>
#include<cstdio>
#include<cctype> 
using namespace std;

	int main() 
	
	{
    
    
	     int   temp=0,max=-1000;
		 int loc[27]={
    
    0};        //记录每一个字符出现的次数。比如字符a出现一次,那么loc[0]=1;以此类推。
	    char  arr[1002];
	    //输入部分 
		cin.get(arr,1002);     //cin.get()函数可以接受空格键。
		
		//逻辑处理部分 
		for(int i=0;arr[i]!='\0';i++)    //该循环中arr[i]!='\0'的意思是:循环进行到数组结束符为止。
		{
    
    
		   arr[i]=tolower(arr[i]);  //将所有字符都转化成小写。
		   loc[arr[i]-'a'] ++;   //字符一个个监测,检测到一个对应位置+1
		} 
		for(int i=0;i<27;i++)
		{
    
    
		   if(max<loc[i])
		   {
    
    
		   	max=loc[i];   
		   	temp=i; //找到最大值,并把第一次出现的最大值赋值给temp
		   }   
		}
		
		//输出部分
		char g='a'+temp;   				//例如:'a'+1=b; 一个道理
     	cout<<g<<" "<<max;
	}

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SKMIT/article/details/113799666