PAT乙级真题 1042 字符统计 C++实现

题目

请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
输入格式:
输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。
输出格式:
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
输入样例:
This is a simple TEST. There ARE numbers and other symbols 1&2&3…
输出样例:
e 7

思路

建立数组记录26个英文字母的出现个数,始终记录当前最大值。

用到了cctype.h判断字符类型。

注意读取一行带空格的字符串,需要用

getline(cin, s);

cin >> s只能读到空格前一个单词。

代码

#include 
#include 
#include 
using namespace std;

int main(){
    string s;
    getline(cin, s);
    vector<int> nums(26);
    int maxNum = 0;
    int maxIndex = 26;
    for (int i=0; i<s.length(); i++){
        if (isalpha(s[i])){
            if (isupper(s[i])){
                s[i] += 32;
            }
            int index = s[i] - 97;
            nums[index]++;
            if (nums[index]>maxNum || (nums[index]==maxNum && index<maxIndex)){
                maxNum = nums[index];
                maxIndex = index;
            }
        }
    }
    cout << (char)(maxIndex+97) << " " << maxNum << endl;
    return 0;
}


你可能感兴趣的:(PAT)