1 5dc21454 2023-07-14 jrmu /* Write a program to print a histogram of the lengths of words in
2 5dc21454 2023-07-14 jrmu * its input. It is easy to draw the histogram with the bars horizontal;
3 5dc21454 2023-07-14 jrmu * a vertical orientation is more challenging. */
5 5dc21454 2023-07-14 jrmu #include <stdio.h>
6 5dc21454 2023-07-14 jrmu #define MAXLENGTH 20
10 5dc21454 2023-07-14 jrmu int histogram[MAXLENGTH+1], letters, c, maxfreq;
12 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i)
13 5dc21454 2023-07-14 jrmu histogram[i] = 0;
14 5dc21454 2023-07-14 jrmu letters = 0;
15 5dc21454 2023-07-14 jrmu maxfreq = 0;
17 5dc21454 2023-07-14 jrmu while ((c = getchar()) != EOF) {
18 5dc21454 2023-07-14 jrmu if (c == ' ' || c == '\t' || c == '\n') {
19 5dc21454 2023-07-14 jrmu ++histogram[letters];
20 5dc21454 2023-07-14 jrmu letters = 0;
25 5dc21454 2023-07-14 jrmu ++histogram[letters];
27 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i) {
28 5dc21454 2023-07-14 jrmu printf("%2d: %5d", i, histogram[i]);
29 5dc21454 2023-07-14 jrmu for (int j = 0; j < histogram[i]; ++j) {
30 5dc21454 2023-07-14 jrmu printf("=");
32 5dc21454 2023-07-14 jrmu printf("\n");
34 5dc21454 2023-07-14 jrmu maxfreq = (histogram[i] > maxfreq ? histogram[i] : maxfreq);
36 5dc21454 2023-07-14 jrmu printf("\n\n");
37 5dc21454 2023-07-14 jrmu for (int h = maxfreq; h > 0; --h) {
38 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i) {
39 5dc21454 2023-07-14 jrmu if (histogram[i] >= h) {
40 5dc21454 2023-07-14 jrmu printf(" | ");
42 5dc21454 2023-07-14 jrmu printf(" ");
45 5dc21454 2023-07-14 jrmu printf("\n");
47 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i) {
48 5dc21454 2023-07-14 jrmu printf("===");
50 5dc21454 2023-07-14 jrmu printf("\n");
51 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i) {
52 5dc21454 2023-07-14 jrmu printf("%2d ",i);
54 5dc21454 2023-07-14 jrmu printf("\n");