华为OJ(字符统计)

描述

如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口:
    输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
    按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
    清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。

 

 

知识点 字符串,排序
运行时间限制 10M
内存限制 128
输入

输入一串字符。

输出

对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

样例输入 aadddccddc
样例输出 dca
定义两个数组a,b分别存放字符和字符个数,遍历每个字符,并进行计数统计,然后对a,b按照b中元素降序排列,对b中元素相等的情况,按照a的ASII码大小排序。

#include<iostream>
#include<string>
using namespace std;
int main()
{	
	string s;
	char a[63];
	int b[63]={0},index;
	getline(cin,s);
	for(int i=0;i<s.size();i++)
		if(islower(s[i]))
			{
				index=s[i]-'a';//小写字母存放在a中0-25的位置
				a[index]=s[i];
				b[index]++;					
			}
		else if(isupper(s[i]))
			{
				index=s[i]-'A'+26;//大写字母存放在a中26-51的位置
				a[index]=s[i];
				b[index]++;				
			}
		else if(isdigit(s[i]))<span style="white-space:pre">		</span>//数字存放在52-62
			{
				index=s[i]-'0'+52;
				a[index]=s[i];
				b[index]++;				
			}
		else if(s[i]==' ')<span style="white-space:pre">		</span>//空格存放到最后
			{
				a[62]=' ';
				b[62]++;				
			}
	for(int i=0;i<63;i++)
		for(int j=i+1;j<63;j++)
			if(b[i]<b[j]||b[i]==b[j]&&a[i]>a[j])
				{
					swap(a[i],a[j]);
					swap(b[i],b[j]);
				}			
	for(int i=0;i<63;i++)
		if(b[i]!=0)
			cout<<a[i];
	//system("pause");
	return 0;
}


展开阅读全文

没有更多推荐了,返回首页