洛谷最经典题目之--垂直柱状图

发布时间:2024年01月14日

一起来交流编程吧【CSDN app】:
http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x9pL9ccIHGKNLE0CWviAqQ_q6HzxomLW&authKey=VslKe623ptw8VRepda%2Bh0Ttr8Ruz8v%2FBW5HpVzyTWU7ECwpHIZpULMj6qIHYZBVb&noverify=0&gro

垂直柱状图

题目描述

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过 100 100 100 个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入格式

四行字符,由大写字母组成,每行不超过 100 100 100 个字符

输出格式

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

样例 #1

样例输入 #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<bits/stdc++.h>
using namespace std;
long long q,w,e,r,t,y,u,o,s,d,f,g,h,j,z,x,c,v,n,m,i;
long long k,l,p;
long long b[100][1000],bb[10000];
string a;
char cc;
int main()
{
	while(cin>>cc)
	{
		if(cc>=65&&cc<=90)
		{
			bb[cc-64]++;
		}
		if(cc>=97&&cc<=122)
		{
			bb[cc-96]++;
		}
	}
	for(i=1;i<=26;i++)
	{
		k=max(k,bb[i]);
	}
	for(i=1;i<=k;i++)
	{
		for(j=1;j<=26;j++)
		{
			if(k-i+1<=bb[j])
			cout<<"* ";
			else cout<<"  ";
		}
		cout<<endl;
	}
	for(i=65;i<=90;i++)
	{
		cc=i;
		cout<<cc<<" ";
	}
    return 0;
}

其实这道题很简单,就是注意细节就可以了,一路扫过去,把所有单词出现的次数记录下来,然后模拟一个输出。

输出其实最麻烦。

主要思路,求最大的,然后从底下或者最上面扫,当a-z中有字母个数达到现在已所指的数目,就输出,否则就输出空格。

还有件很重要的是,别输出多余的空格了,注意理解。
通过本题目能够熟悉string字符串的相关操作,包括字符串的STL函数,字符串的遍历以及字符串输入三部分来说明

STL中字符串操作

std::string::reverse() 用于翻转模版,需要提供首尾迭代器作为参数,使用实例:reverse(s.begin(),s.end())
std::string::erase() 用于删除区间的字符片段,传入两个迭代器l与r,用于删除区间[l,r)[l,r)的范围内的字符。使用实例:s.erase(s.end()-5, s.end())
std::string::susbstr() 用于提取字符串,使用的区间范围同样是[l,r)[l,r)的,使用例子:s.substr(s.find(‘’)+1) 提示:其中一个参数表示,从此处到字符串结尾。
std::string:find()用于查找子字符串在母串中的第一个出现的位置,并返回一个int型的位置,使用例子:s.find(subs, beta+1),表示从位置beta继续向后寻找子串,并返回找到的第一个子串的位置,另外若无法找到时,采用string::npos作为查找失败的结果,若判断使用>=0>=0无法成功判断

文章来源:https://blog.csdn.net/yaosichengalpha/article/details/135574369
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。