一起来交流编程吧【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 个字符
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
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
每行输出后面不允许出现多余的空格。
直接上代码
#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函数,字符串的遍历以及字符串输入三部分来说明
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无法成功判断