/* prints a vertical histogram of the lengths of words in input */ #include #include #define MAXHIST 10.0 /* maximum number of characters in a histogram */ #define MAXWORD 20 /* maximum allowable length of a word */ enum { IN, OUT }; int main(void) { int wlen[MAXWORD]; int i, c, state; int longest = 0; /* longest bar to print */ /* initialize wlen[] */ for (i = 0; i < MAXWORD; i++) wlen[i] = 0; i = 0; state = OUT; while ((c=getchar()) != EOF) { /* get input */ if (state == OUT) { if (!isspace(c)) { state = IN; i++; } } else if (state == IN) { if (isspace(c)) { if (i > 0 && i < MAXWORD) { wlen[i]++; longest = (wlen[i] > longest) ? wlen[i] : longest; } state = OUT; i = 0; } else { i++; } } } /* print histogram */ for (c = MAXHIST; c > 0; c--) { putchar('\n'); for (i = 0; i < MAXWORD; i++) { if (wlen[i] >= ((longest / MAXHIST) * c) && wlen[i] > 0) printf("# "); else printf(" "); } } /* print footer */ putchar('\n'); for (i = 0; i < MAXWORD; i++) if (wlen[i] > 0) printf("---"); putchar('\n'); for (i = 0; i < MAXWORD; i++) if (wlen[i] > 0) printf("%-3d", i); putchar('\n'); return 0; }