题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入
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<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int num[26] = {0};
int main()
{
string a;
for(int i = 0;i < 4;i ++){
getline(cin,a);
int len = a.length();
for(int j = 0;j < len;j ++){
if(a[j] >= 'A'&&a[j] <= 'Z'){
num[a[j] - 'A']++;
}
}
}
int maxn = -1;
for(int i = 0;i < 26;i++){
maxn = max(maxn,num[i]);
}
for(int i = maxn;i >= 1;i--){
for(int j = 0;j < 26;j++){
if(num[j] >= i) cout << '*' << ' ';
else cout << ' ' << ' ';
}
cout << endl;
}
for(int i = 0;i < 25;i++){
printf("%c ",'A' + i);
}
cout << 'Z';
return 0;
}