加qq1126137994 微信:liu1126137994 一起学习更多技术!!!

题目:
给你一个原始字符串,根据该字符串内每一个字符串出现的次数,按照ASCII码递增的排序重新调整输出。

举例:
eeefgghh
则每种字符出现的次数分别是:
(1).eee 3次
(2).f 1次
(3).gg 2次
(4).hhh 3次
重新输出后的字符串如下:
efghegheh

编程实现上述功能:
提示:
(1)原始字符串中仅可能出现字符与数字
(2)注意区分字符的大小写

思路:
不同的字符与数字出现的次数可能为多次,可以利用哈希表原理,生成一个大小为128的数组,数组里面对应的值的下标,代表原始字符串中出现的字符的ASCII码的小,数组的值,代表相应字符串出现的次数。刚好打印数组的下标字符,打印一次,数组对应的值减1,直到减为0则说明出现多次的字符已经全部输出完成!

#include <iostream>
#include <string>

using namespace std;

//求数组(哈希表)中值出现次数最多的下标,用于循环多少次
int max_count(int count[], int n)
{
    int max_count = 0;
    for (int i = 1; i < n; i++)
    {
        if (count[i]>count[max_count])
        {
            max_count = i;
        }
    }

    return max_count;
}

int main()
{
    char str[1000];
    char* p = str;
    gets(str);
    int count[128];
    for (int i = 0; i < 128; i++)
    {
        count[i] = 0;
    }
    for (; *p != 0; p++)
    {
        //求数组中对应下标(即字符串的字符的值)出现的次数
        count[*p]++;
    }

    int num = max_count(count,128);
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < 128; j++)
        {
            if (count[j] != 0)
            {
                printf("%c",j);
                count[j]--;
            }

        }
    }
    //getchar();
    return 0;
}

或者:

#include <iostream>
#include <string>

using namespace std;

int max_count(int count[], int n)
{
    int max_count = 0;
    for (int i = 1; i < n; i++)
    {
        if (count[i]>count[max_count])
        {
            max_count = i;
        }
    }

    return max_count;
}

int main()
{
    string str;
    getline(cin,str,'\n');
    int len = str.size();
    int count[128];
    for (int i = 0; i < 128; i++)
    {
        count[i] = 0;
    }
    for (int i=0; i<len; i++)
    {
        count[str[i]]++;
    }

    int num = max_count(count,128);
    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < 128; j++)
        {
            if (count[j] != 0)
            {
                printf("%c",j);
                count[j]--;
            }

        }
    }
    //getchar();
    return 0;
}