開啟章節選單
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; } }