链接:https://www.luogu.org/problemnew/show/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
说明
每行输出后面不允许出现多余的空格。
思路:
思路清晰,读取四行数据,检索出现次数,通过数组保存一气呵成,我这里读取输入用的是getline,我觉得会好一点。
(但是这题我debug了半天,最后才发现我少空格。。。。。。)
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 6 int word[27]; 7 8 int main() 9 { 10 int max=0; 11 char a[105]; 12 for(int i=0;i<4;i++) 13 { 14 cin.getline(a,105); 15 int n=strlen(a); 16 for(int j=0;j<n;j++) 17 { 18 if(a[j]>='A'&&a[j]<='Z') 19 word[a[j]-'A']++; 20 } 21 } 22 for(int i=0;i<26;i++) 23 if(word[i]>max) 24 max=word[i]; 25 for(int i=max;i>=1;i--) 26 { 27 for(int j=0;j<26;j++) 28 { 29 if(word[j]>=i) 30 cout<<"* "; 31 else 32 cout<<" "; 33 } 34 cout<<endl; 35 } 36 for(int i=0;i<26;i++) 37 cout<<(char)('A'+i)<<" "; 38 return 0; 39 }