字符统计及重排

字符统计及重排

【字符统计及重排】给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及
其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。

输入描述:

输入一行,为一个仅包含字母的字符串。

输出描述:

按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾的分号;字母和次数间用英文冒号分隔。

示例1

输入
xyxyXX
输出
x:2;y:2;X:2;

C++
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
/*
【字符统计及重排】给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及
其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。
输入描述:
输入一行,为一个仅包含字母的字符串。
输出描述:
按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾的分号;字母和次数间用英文冒号分隔。
示例1:
输入
xyxyXX
输出
x:2;y:2;X:2;
*/
bool cmp(vector<int> num1, vector<int>num2);

int main()
{
	vector<char>input;
	char n;
	n = getchar();
	while(n != '\n')
	{
		//if(n == '\n')
		//{
		//	break;
		//}
		input.push_back(n);
		n = getchar();
	}
	vector<vector<int>>num;
	map<char,int>m;
	//先用map存,再转为vector排序;
	for (int i = 0; i < input.size(); i++)
	{
		m[input[i]]++;
	}
	map<char, int>::iterator it;
	it = m.begin();
	while(it != m.end())
	{
		num.push_back({ it->first, it->second });
		it++;
	}
	sort(num.begin(), num.end(), cmp);
	for (int i = 0; i < num.size(); i++)
	{
		if(i != num.size() - 1)
		{
			cout << (char)num[i][0] << ":" << num[i][1] << ";";
		}else
		{
			cout << (char)num[i][0] << ":" << num[i][1];
		}
	}
	cout << endl;
	system("pause");
	return 0;
}

bool cmp(vector<int> num1,vector<int>num2)
{
	if(num1[1] == num2[1])
	{
		if((char)num1[0] <= 'Z' && (char)num2[0] <='Z')
		{
			return (char)num1[0] < (char)num2[0];
		}else if((char)num1[0] <= 'Z' || (char)num2[0] <= 'Z')
		{
			return(char)num1[0] > (char)num2[0];
		}else
		{
			return (char)num1[0] < (char)num2[0];
		}
	}else
	{
		return (char)num1[1] > (char)num2[1];
	}
}



全部评论

相关推荐

不愿透露姓名的神秘牛友
06-26 14:50
人力小鱼姐:有后面墨迹那两句的时间问题早回答完了
点赞 评论 收藏
分享
05-25 10:45
门头沟学院 Java
Frank_zhang:没实习一个项目肯定不够,可以再做一个轮子,技术栈再补一个mq,微服务,整体再换个简历模板,暑期尽量再找一个日常实习
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务