Page 24

Write a program to print a histogram of the frequencies of different characters in its input.

#include <stdio.h>

#define MIN_CHARACTER '!'
#define MAX_CHARACTER '~'

int main()
{
	int c;
	int range = MAX_CHARACTER - MIN_CHARACTER;
	int characters[range];
	int highest_count = 0;

	for (int i = 0; i < range; i++) {
		characters[i] = 0;
	}

	while ((c = getchar()) != EOF) {
		if (c >= MIN_CHARACTER && c <= MAX_CHARACTER) {
			int this_count = ++characters[c - MIN_CHARACTER];
			if (this_count > highest_count) {
				highest_count = this_count;
			}
		}
	}

	for (int row = highest_count; row > 0; row--) {
		for (int col = 0; col < range; col++) {
			putchar(' ');
			if (characters[col] >= row) {
				putchar('#');
			} else {
				putchar(' ');
			}
		}
		putchar('\n');
	}

	for (int i = 0; i < range; i++) {
		putchar(' ');
		putchar(i + MIN_CHARACTER);
	}
}