程序输出之美|洛谷P1598 垂直柱状图

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过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<string>

using namespace std;

int main()
{
	string str;
	int a[30]={0};
	
	for(int i = 0; i < 4; i ++)  //统计四次
	{
		getline(cin,str);  // 输入一行
		for(int i = 0; i < str.size();i++)
		{
			if(str[i] > 64 && str[i] < 91)  //是大写字母 
			{
				a[str[i] - 'A' + 1] ++ ; //对应的A存入数组a中次数 
				                        //数组从下标1开始计数 
			}
		}
	}	
//	for(int i = 1; i <= 26;i++) 	cout << a[i] << " ";  //检查统计是否正确

	int maxn = 0;
	for(int i = 1;i <= 26; i++) maxn = max(a[i],maxn);  //记录最大数 

	char b[maxn+1][27+1] = {'|'};
	for(int j = 1;j <= 27 ; j ++ )  //列 
	{
		for(int i = maxn; i > maxn - a[j];i -- )  // 行 从下向上 
		{
			b[i][j] = '*';		
		} 
		for(int i = maxn - a[j]; i >= 0 ; i--)
		{
			b[i][j] = ' ';	
		}
	}  //存入完成
	
		
	
	int c[maxn]={0};
	for(int i = 0;i <= maxn ; i++ )  //遍历每行 
	{
		for(int j = 27; j >= 1 ; j -- ) //倒叙遍历直到出现第一个 * 
		{
			if(b[i][j] == '*')
			{
				c[i] = j;  //记录最后一个* 的位置
				break;  //结束内循环 
			}	
		}
	}
//	for(int i = 0;i <= maxn;i++)  cout << c[i] << " ";
//	cout<<endl;
	
	for(int i = 0;i <=maxn ; i++ )
	{
		for(int j = 1; j <= c[i] ; j ++ )
		{
			if(j!=c[i])
//			printf("%c ",b[i][j]);
			cout << b[i][j] << " ";
			else
//			printf("%c\n",b[i][j]);
			cout << b[i][j] << 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;
}
原创文章 50 获赞 139 访问量 2万+

猜你喜欢

转载自blog.csdn.net/diviner_s/article/details/104731685
今日推荐