C++:字符统计

74 篇文章 2 订阅

题目描述

如果统计的个数相同,则按照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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值