您的位置:首页 > 其它

6:垂直直方图

2018-03-01 08:52 190 查看
输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数。注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数。输入输入包括4行由大写字母组成的文本,每行上字符的数目不超过80个。输出输出包括若干行。其中最后一行给出26个大写英文字母,这些字母之间用一个空格隔开。前面的几行包括空格和星号,每个字母出现几次,就在这个字母的上方输出一个星号。注意:输出的第一行不能是空行。样例输入
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
样例输出
*
*
*                   *
*                   *     *   *
*                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>lu;
char a[100]; int geshu[26];
for (int i = 0; i < 26; i++) {
geshu[i] = 0;
}
char b[100]; char c[100]; char d[100];
cin.getline(a, 100);
cin.getline(b, 100);
cin.getline(c, 100);
cin.getline(d, 100);
for (int i = 0; i < 100; i++)
{
if (a[i] >= 'A'&&a[i] <= 'Z') {
int uu = a[i] - 'A';
geshu[uu]++;
}
if (b[i] >= 'A'&&a[i] <= 'Z') {
int uu = b[i] - 'A';
geshu[uu]++;
}
if (c[i] >= 'A'&&a[i] <= 'Z') {
int uu = c[i] - 'A';
geshu[uu]++;
}
if (d[i] >= 'A'&&a[i] <= 'Z') {
int uu = d[i] - 'A';
geshu[uu]++;
}
}
int max = geshu[0];
//求得出现次数最大值
for (int i = 0; i < 26; i++)
{
if (max < geshu[i])
{
max = geshu[i];
}
}
for (int o = max; o >0; o--)
{
for (int p = 0; p < 26; p++)
{
if (geshu[p] >=o)
{
lu.push(p);
}
}
int number = 0;
while (lu.empty()==false)
{
if (number == 0)
{
for (int q = 0; q < lu.front(); q++)
{
cout << "  ";
number = number + 2;
}
cout << "* ";
number = number + 2;
lu.pop();
}
else
{
int num = number;
for (int q = 0; q < lu.front()-num/2; q++)
{
cout << "  ";
number = number + 2;
}
cout << "* ";
number = number + 2;
lu.pop();
}
//number = 0;
}
cout << endl;

}

for (char ch = 'A'; ch <= 'Z'; ch++)
{
cout << ch << " ";
}

system("pause");
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: