#include <iostream>
#include <cstring>
#include <ctype.h>
using namespace std;
int main()
{
int alpha[26] = {0};
char buf[80 + 10] = {};
for(int i = 0; i < 4; i++)
{
cin.getline(buf, 81);
for(int j = 0; j < strlen(buf); j++)
{
if(isalpha(buf[j]))
alpha[buf[j] - 'A'] += 1;
}
}
int max = 0;
int i, j;
for(i = 0; i < 26; i++)
{
max = max > alpha[i] ? max : alpha[i]; // max记录柱形图最高层数
}
for(i = 0; i < max; i++)
{
for(j = 0; j < 26; j++)
{
int last = 1; // last标记的是当前字母是不是最后一个出现在水平线上的'*',为的是避免在每行生成多余的空格
for(int k = j; k < 26; k++)
{
if(max - i <= alpha[k])
last = 0;
}
if(last)
{
cout << endl;
break;
}
if(max - i > alpha[j])
cout << " ";
else
{
cout << "*";
}
last = 1;
for(int k = j + 1; k < 26; k++)
{
if(max - i <= alpha[k])
last = 0;
}
if(!last && j != 25)
cout << " ";
if(j == 25)
cout << endl;
}
}
cout << "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" << endl;
return 0;
}
垂直直方图
最新推荐文章于 2024-03-06 21:37:29 发布