洛谷 P1598 垂直柱状图(输入带空格的字符串)

P1598 垂直柱状图

菜鸟生成记(25)

这个题有点水,考察字符串的基本功(哎!就喜欢这考基本功的水题)

这一题涉及到输入带空格的字符串输入和格式化输出;

唉!只从gets死了(C11删除gets,洛谷好像对gets和getchar也很不友善)之后,就很烦,很难受;
没办法只能找替代品了;突然发现string还是很不错的,功能贼强(C++牛批)

下面是带空格的字符串输入的一些方法(这是参考大佬的);

大佬的帖子地址

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=2e+2+10;
char s[N][N];//存原图(下面,图1) 
int a[N]={0};//字符计数(字母的ASCII作为下标) 
int main()
{
	int max1=0;//记录出现最多的字母(以便后面补空格) 
	int k=0;//取值0~26(k+'A'代表26个字母) 
	for(int i=0;i<4;i++)
	{
		string str;
		getline(cin,str);//读取带空格的字符串 
		for(int j=0;j<str.length();j++)
		a[str[j]]++;//记录字母出现的次数 
	}
	for(int i='A';i<='Z';i++)
	if(a[i]>max1)
	max1=a[i];//记录出现最多的字母的个数(以便后面补空格) 
	for(int i=0;i<51;i++)//A B C ... Z因为输出时要穿插着空格行 
	{//所以要循环2倍-1(尾部没有空格行); 
		if(i%2==0)//偶数行为字母行 
		{
			int x='A'+k++;//A~Z; 
			s[i][0]=(char)x;//强制转化char
			//每一行第一个元素储存A~Z一个字母 
			for(int j=1;j<=a[x];j++)//a[x]:字母x的个数 
			{
				s[i][j]='*';
			}
			for(int j=a[x]+1;j<=max1;j++)
			s[i][j]=' ';//不够最大长度补空格 
		}
		else//奇数行为空格行 
		{
			for(int j=0;j<=max1;j++)
			s[i][j]=' ';
		}
		//cout<<s[i]<<endl;
	}//现在只得到了原图(图1),经过下面的格式化输出就是图2了
	for(int i=max1;i>=0;i--)
	{//输出矩阵(下面,图2) 
		for(int j=0;j<51;j++)
		cout<<s[j][i];
		cout<<endl;
	}
	return 0;
}
/*图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*
*/ 
/*图2
                            *
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值