diff options
Diffstat (limited to 'ch01/ex13-histogram.c')
| -rw-r--r-- | ch01/ex13-histogram.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/ch01/ex13-histogram.c b/ch01/ex13-histogram.c new file mode 100644 index 0000000..14002a5 --- /dev/null +++ b/ch01/ex13-histogram.c @@ -0,0 +1,52 @@ +#include <stdio.h> + +#define IN 1 /* inside a word */ +#define OUT 0 /* outside a word */ + +/* print a histogram of word lengths */ +int main() +{ + int c, i, j, nc, state; + int ndigit[10]; + + for (i = 0; i < 10; ++i) + ndigit[i] = 0; + + nc = 0; + state = OUT; + while ((c = getchar()) != EOF) { + if (c == ' ' || c == '\n' || c == '\t') { + if (state == IN) { + i = nc - 1; + if (i > 9) + i = 9; + ++ndigit[i]; + nc = 0; + } + state = OUT; + } else if (state == OUT) { + state = IN; + } + + if (state == IN) + ++nc; + } + + if (state == IN) { + i = nc - 1; + if (i > 9) + i = 9; + ++ndigit[i]; + nc = 0; + } + + for (i = 0; i < 10; ++i) { + if (i == 9) + printf(" >9: "); + else + printf(" %2d: ", i + 1); + for (j = 0; j < ndigit[i]; ++j) + putchar('#'); + putchar('\n'); + } +} |
