/*编写一个程序,打印输入中各个字符出现频度的直方图*/
#include<stdio.h>
int main() {
int i, j, c;
i = j = c = 0;
unsigned int PD[128];
//给统计频度数组赋初始值
for (i = 0; i < 128; i++)
{
PD[i] = 0;
}
while ((c = getchar()) != EOF){
//进行字符匹配
if (c != ' ' && c != '\t' && c != '\n') {
for (i = 0; i < 128; i++) {
if (i == c) {
PD[i]++;
}
}
}
}
/*// 显示水平直方图。
for (i = 0; i < 128; i++)
{
if (PD[i] > 0 && i != '\t' && i != '\n' && i != ' ')
{
printf("%c:", i);
for (j = 0; j < PD[i]; j++) {
printf("*");
}
printf("\n");
}
}
*/
//垂直打印直方图
//取最大值
int max = 0;
for (i = 0; i < 128; i++) {
if (PD[i] > max) {
max = PD[i];
}
}
//外循环打印Y轴
//内循环打印X轴
for (i = max; i > 0; i--) {
for (j = 0; j < 128; j++) {
if (PD[j] > 0) {
if (PD[j] >= i) {
printf("** ");
}
else
printf(" ");
}
}
printf("\n");
}
//打印字符
for (i = 0; i < 128; i++) {
if (PD[i] > 0) {
printf("%-4c", i);
}
}
printf("\n");
//打印字符频次
for (i = 0; i < 128; i++) {
if (PD[i] > 0 ) {
printf("%-4d", PD[i]);
}
}
printf("\n");
}