題目描述
寫一個程序從輸入文件中去讀取四行大寫字母(全都是大寫的,每行不超過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
說明
每行輸出後面不允許出現多餘的空格。
剛看見這個題目的時候感覺頭很大,不知從何入手,但是過了一會仔細想想,也不難。
題目其實就是統計四行字符中,26個英文字母的個數而已,剛開始用c++的cin進行輸入,但是忽略了cin不能喫掉空格,後改成getline(cin,s);對了(記得加頭文件string)!這個題的輸出可把我迷的不行,後來覺得用二維數組輸出比較方便,行數由字母的最大值決定,列數自然是26。用temp標記最大值,每次減1,來觀察何時輸出"* ",何時輸出" ",注意輸出*字符後需要加一個空格,不輸出*時需要輸出兩個空格。
代碼實現:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string s;
int a[26];
memset(a,0,sizeof(a));
int n=4;
while(n--){
getline(cin,s);
for(int i=0;i<s.size();i++){
a[s[i]-'A']++;
}
}
int maxi=a[0],temp=0;
for(int i=1;i<26;i++)
maxi=a[i]>maxi?a[i]:maxi;
temp=maxi;
for(int i=0;i<maxi;i++){
for(int j=0;j<26;j++){
if(a[j]>=temp)
cout<<"* ";
else
cout<<" ";
}
temp--;
cout<<"\n";
}
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";
return 0;
}