Blame


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. */
4 5dc21454 2023-07-14 jrmu
5 5dc21454 2023-07-14 jrmu #include <stdio.h>
6 5dc21454 2023-07-14 jrmu #define MAXLENGTH 20
7 5dc21454 2023-07-14 jrmu
8 5dc21454 2023-07-14 jrmu main()
9 5dc21454 2023-07-14 jrmu {
10 5dc21454 2023-07-14 jrmu int histogram[MAXLENGTH+1], letters, c, maxfreq;
11 5dc21454 2023-07-14 jrmu
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;
16 5dc21454 2023-07-14 jrmu
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;
21 5dc21454 2023-07-14 jrmu } else {
22 5dc21454 2023-07-14 jrmu ++letters;
23 5dc21454 2023-07-14 jrmu }
24 5dc21454 2023-07-14 jrmu }
25 5dc21454 2023-07-14 jrmu ++histogram[letters];
26 5dc21454 2023-07-14 jrmu
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("=");
31 5dc21454 2023-07-14 jrmu }
32 5dc21454 2023-07-14 jrmu printf("\n");
33 5dc21454 2023-07-14 jrmu
34 5dc21454 2023-07-14 jrmu maxfreq = (histogram[i] > maxfreq ? histogram[i] : maxfreq);
35 5dc21454 2023-07-14 jrmu }
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(" | ");
41 5dc21454 2023-07-14 jrmu } else {
42 5dc21454 2023-07-14 jrmu printf(" ");
43 5dc21454 2023-07-14 jrmu }
44 5dc21454 2023-07-14 jrmu }
45 5dc21454 2023-07-14 jrmu printf("\n");
46 5dc21454 2023-07-14 jrmu }
47 5dc21454 2023-07-14 jrmu for (int i = 1; i <= MAXLENGTH; ++i) {
48 5dc21454 2023-07-14 jrmu printf("===");
49 5dc21454 2023-07-14 jrmu }
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);
53 5dc21454 2023-07-14 jrmu }
54 5dc21454 2023-07-14 jrmu printf("\n");
55 5dc21454 2023-07-14 jrmu }