题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入格式
四行字符,由大写字母组成,每行不超过100个字符
输出格式
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
输入输出样例
输入 #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<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 26,M = 110; int main(){ char a[M]; int aa[N]; memset(aa,0,sizeof aa);//这个置零搞了我好一会儿,这里不置为0,判断最大次数会有问题 for(int i = 0;i < 4;i++){ gets(a); int n = strlen(a); for(int j = 0;j < n;j++) if(a[j] >='A' && a[j]<='Z'){ int c; c = a[j] - 'A'; aa[c]++; } } int maxn = 0; for(int i = 0;i < 26;i++){ maxn = max(maxn,aa[i]);//找出出现次数最多的 } for(int i = maxn;i > 0;i--)//从最大的情况往下输出 { for(int j = 0;j < 26;j++) { if(aa[j] >= i) cout << "* ";//如果当前的次数大于的等于我们的i就*,也就是一个aa[j]可能会被判断很多遍 else cout << " "; } puts(""); } for(int i = 0;i < 26;i++) printf("%c ",i + 'A'); return 0; }