10008

題目說明

將題目給定的字串中的字母進行加總並排序

解題過程

將字母轉成大寫後加總並進行自訂排序

#include <bits/stdc++.h>
using namespace std;

// 自訂排序:先依照出現次數遞減,再按字母順序遞增
bool LESS(pair<char, int>& a, pair<char, int>& b) {
    if (a.second != b.second) return a.second > b.second;
    return a.first < b.first;
}

int main() {
    int n;
    cin >> n;
    cin.ignore();  // 吃掉換行符

    map<char, int> mp;  // 統計字母次數

    while (n--) {
        string s;
        getline(cin, s);  // 讀一整行文字

        for (int i = 0; i < s.size(); i++) {
            // 若為小寫則轉為大寫
            if (s[i] >= 'a' && s[i] <= 'z') s[i] = toupper(s[i]);

            // 若為英文字母則統計
            if (s[i] >= 'A' && s[i] <= 'Z') mp[s[i]]++;
        }
    }

    // 將 map 轉為 vector,方便排序
    vector<pair<char, int>> vr(mp.begin(), mp.end());
    sort(vr.begin(), vr.end(), LESS);  // 排序

    // 輸出
    for (int i = 0; i < vr.size(); i++) {
        cout << vr[i].first << ' ' << vr[i].second << endl;
    }
}