字符串统计的题经常出现,大概题意就是这样的;
输入一个字符串“asddweqdsadwqe”
统计每个字符出现的次数,按统计个数从大到小输出字符和对应个数;
如果个数相同,按照字典序输出;
特地记录一下:
此题一般有两种
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
//重新定义排序算法
bool comp(const pair<char,int> &a,const pair<char,int> &b)
{
if(a.second == b.second) //如果个数相同 输出字典序 ASCII码字典序小的
return a.first<b.first;
return a.second>b.second; //个数大的在前面
}
//然后用map统计
int main()
{
string str;
cin>>str;
map<char,int> data;
for(int i=0;i<str.size();i++)
{
if(data.count(str[i]))
data.find(str[i])->second++;
else
data.insert(make_pair(str[i],1));
}
//以上map统计完毕
map<char,int> data::iterator iter;
vector<pair< char,int > > da;
for(iter = data.begin();iter!=data.end();iter++)
{
da.push_back(make_pair(iter->first,iter->second));
}
sort(da.begin(),da.end(),comp);
//个数从大到小,字典从小到大
for(int i=da.size()-1;i>=0;i--)
{
cout<<da[i]<<endl;
}
}