垂直柱状图

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过 100 个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入格式

四行字符,由大写字母组成,每行不超过 100 个字符

输出格式

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

样例 #1

样例输入 #1

THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!

样例输出 #1

*
*
* *
* * * *
* * * *
* * * * * *
* * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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 <bits/stdc++.h>
using namespace std;
int main() {
map<char, int> myMap;
string line;
int lineCount = 0;
// 读取输入的四行数据
while (getline(cin, line) && lineCount < 4) {
for (char ch : line) {
if (isalpha(ch) && isupper(ch)) { // 只统计大写字母
myMap[ch]++;
}
}
lineCount++;
}
// 找到最大频率
int maxCount = 0;
for (char i = 'A'; i <= 'Z'; i++) {
maxCount = max(maxCount, myMap[i]);
}
// 输出柱状图
for (int i = maxCount; i > 0; i--) {
bool first = true;
for (char j = 'A'; j <= 'Z'; j++) {
if (!first) cout << " ";
if (myMap[j] >= i) {
cout << "*";
} else {
cout << " ";
}
first = false;
}
cout << endl;
}
// 输出最后一行字母标签
for (char j = 'A'; j <= 'Z'; j++) {
if (j != 'A') cout << " ";
cout << j;
}
cout << endl;
return 0;
}
发布于   xiins  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示