写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过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
首先,我们在主函数外面开个数组a,先输入4行字符串,并用数组a存放每个大写字母出现的次数。
然后在26个字母中找出最大值。
由图 * 的排列可以知道for循环的条件是i=max; i>0; i-- (要从上往下递增,如果是i++形式的话整个图是跟样例呈水平对称的) 。
然后接内循环(这一核心步骤很巧妙)。
最后打个表,收工!
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main()
{
int max=0;
char b[100];
for(int i=0;i<4;i++) //控制输出四行字符串
{
cin.getline(b,100);
int len=strlen(b);
for(int j=0;j<len;j++)
if(b[j]>='A' && b[j]<='Z') a[b[j]-'A']++; //数组a用来存放每个字母出现次数
}
for(int i=0;i<26;i++) //在26个字母中找出最大值
{
if(max<a[i]) max=a[i];
}
for(int i=max;i>0;i--)
{
for(int j=0;j<26;j++)
{
if(a[j]>=i) cout<<"* "; //很有灵性的判断语句
else cout<<" ";
}
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;
}