1. 程式人生 > >【華為機試108題】字元統計

【華為機試108題】字元統計

題目描述
如果統計的個數相同,則按照ASII碼由小到大排序輸出 。如果有其他字元,則對這些字元不用進行統計。

實現以下介面:
輸入一個字串,對字元中的各個英文字元,數字,空格進行統計(可反覆呼叫)
按照統計個數由多到少輸出統計結果,如果統計的個數相同,則按照ASII碼由小到大排序輸出
清空目前的統計結果,重新統計
呼叫者會保證:
輸入的字串以‘\0’結尾。

輸入描述:
輸入一串字元。

輸出描述:
對字元中的
各個英文字元(大小寫分開統計),數字,空格進行統計,並按照統計個數由多到少輸出,如果統計的個數相同,則按照ASII碼由小到大排序輸出 。如果有其他字元,則對這些字元不用進行統計。

示例1
輸入
aadddccddc
輸出
dca

思路:我們可以使用map來進行統計相應字元的個數,因為map是非線性結構,無法直接排序,所以我們把其放入vector中,然後定義cmp函式來對其進行排序。
因為map容器預設是按key值升序排序的,這樣就可以如果兩個字元的個數相同,輸出的ascii碼小的在前的效果了。
此處我們使用的stable_sort函式,這個函式的優點是如果兩個數相同,則不會改變它們的相對位置。

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

bool cmp(pair<char
,int> a,pair<char,int> b) { return a.second > b.second; } int main() { string str; while(getline(cin,str)) { map<char,int>m; for(int i=0;i<str.size();i++) m[str[i]]++; vector<pair<char,int>>v (m.begin(),m.end()); stable_sort(v.begin(),v.end(),cmp); for
(auto &p:v) cout<<p.first; cout<<endl; } return 0; }