题目描述
如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1
输入
复制
aadddccddc
输出
复制
dca
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
while(getline(cin, input))
{
char val[63] = {0};
int number[63] = {0};
for(int i = 0; i < 63; i++)
{
if(i == 0)
val[i] = ' ';
if(i >= 1 && i <= 10)
val[i] = '0' + i - 1;
if(i >= 11 && i <= 36)
val[i] = 'A' + i - 11;
if(i >= 37 && i < 63)
val[i] = 'a' + i - 37;
}
for(int i = 0; i < input.size(); i++)
{
if(input[i] == ' ')
{
number[0]++;
}
else if(input[i] >= '0' && input[i] <= '9')
{
number[1 + input[i] - '0']++;
}
else if(input[i] >= 'A' && input[i] <= 'Z')
{
number[11 + input[i] - 'A']++;
}
else if(input[i] >= 'a' && input[i] <= 'z')
{
number[37 + input[i] - 'a']++;
}
}
int k;
char m;
for(int i = 0; i < 63; i++)
{
for(int j = i + 1; j < 63; j++)
{
if(number[j] > number[i])
{
k = number[i];
m = val[i];
number[i] = number[j];
number[j] = k;
val[i] = val[j];
val[j] = m;
}
if(number[j] == number[i])
{
if(val[j] < val[i])
{
m = val[i];
val[i] = val[j];
val[j] = m;
}
}
}
}
string output;
for(int i = 0; i < 63; i++)
{
if(number[i] > 0)
output.push_back(val[i]);
}
cout << output.c_str() << endl;
}
return 0;
}