最初的题目似乎来源HDU
/*6. 问题描述输入4行全部由大写字母组成的文本,
输出一个垂直直方图,给出每个字符出现的次数。
注意:只用输出字符的出现次数,不用输出空白字符,
数字或者标点符号的输出次数。输入形式输入包括4行由大写字母组成的文本,
每行上字符的数目不超过80个。输出形式输出包括若干行。其中最后一行给出26个大写
英文字母,这些字母之间用空格隔开。前面的几行包括空格和星号,每个字母出现几次
,就在这个字母的上方输出一个星号。注意:输出的第一行不能是空行。
样例输入
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM
PROGRAM.
HELLO!
样例输出*/
#include<stdio.h>
#include<string.h>
int main() {
char str[100] = { "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" };
char str1[4][100];
int c[26] = { 0 }, b[26] = { 0 }, temp = 0;
int i, j;
for (i = 0; i < 4; i++) {
gets(str1[i]);
}
for (i = 0; i < 4; i++) { //统计字符数目
for (j = 0; j<strlen(str1[i]); j++) {
if ((str1[i][j] >= 'A')&&(str1[i][j] <= 'Z'))
c[str1[i][j] - 'A']++;
}
}
for (i = 0; i < 26; i++) {
b[i] = c[i];
}
for (i = 0; i<25; i++) {
for (j = 0; j < 25 - i; j++) {
if (b[j]>b[j + 1]) {
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
for (i = b[25]; i >= 0; i--) {
for (j = 0; j<26; j++) {
if (c[j]>i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
printf("%s", str);
return 0;
}