【華為機試108題】字元統計
阿新 • • 發佈:2019-01-23
題目描述
如果統計的個數相同,則按照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;
}