题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入格式
四行字符,由大写字母组成,每行不超过100个字符
输出格式
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
思路
简单的字符串+模拟。(不过还是有傻子不看题debug了好久
1.“在任何一行末尾不要打印不需要的多余空格” 意思是打印完每一行最后一个星号后直接换行。我的思路是,对数组进行两次遍历。第一次遍历统计该行中应出现的星号数sum,第二次遍历当已打印的星号数==sum时跳出循环,进行换行
2.注意输出样例的空格。。输出样例中每一列之间都用空格隔开。。
代码
#include<stdio.h>
#include<string.h>
int main()
{
int a[26]={0};
char tem[105];
for(int i=0;i<4;i++){
gets(tem);
for(int j=0;j<strlen(tem);j++){
if(tem[j]>='A'&&tem[j]<='Z') a[tem[j]-'A']++;
}
}
int max=0;
for(int i=0;i<26;i++){
max=max>a[i]?max:a[i];
}
int max1=max;
for(int i=0;i<max;i++){
int cnt=0;
for(int j=0;j<26;j++){
if(a[j]>=max1) cnt++;
}
int cnt1=0;
for(int j=0;j<26;j++){
if(cnt1==cnt) break;
if(a[j]>=max1){
printf("* ");
cnt1++;
}else{
printf(" ");
}
}
printf("\n");
max1--;
}
for(int i=0;i<26;i++){
printf("%c",'A'+i);
if(i==25) printf("\n"); else printf(" ");
}
return 0;
}