lolamontes69

K+R Exercise1_13

Sep 5th, 2014
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define IN  1    /* inside a word */
  5. #define OUT 0    /* inside a word */
  6. #define MAXWORDLEN 15
  7.  
  8. int main(void)
  9. {
  10.     int i, j;
  11.     int c, wl, state, maxval;
  12.     int length[MAXWORDLEN+1];
  13.  
  14.     for (i = 0; i <= MAXWORDLEN; ++i)
  15.         length[i] = 0;
  16.  
  17.     state = OUT;
  18.     while ((c = getchar()) != EOF) {
  19.         if (c == ' ' || c == '\t' || c == '\n') {
  20.             if (state == IN) {
  21.                 if (wl <= MAXWORDLEN)
  22.                     length[wl-1] += 1;
  23.                 else
  24.                     length[MAXWORDLEN] += 1;
  25.                 state = OUT;
  26.             }
  27.         } else {
  28.             if (state == OUT) {
  29.                 wl = 0;
  30.                 state = IN;
  31.             }
  32.             wl +=1;
  33.         }
  34.     }
  35.  
  36.  
  37.     /* Vertical histogram */
  38.  
  39.     printf("\nVertical histogram\n\n");
  40.  
  41.     /* get maximum wordlength count */
  42.     maxval = 0;
  43.     for (i = 0; i <= MAXWORDLEN; ++i)
  44.         if (length[i] > maxval)
  45.             maxval = length[i];
  46.  
  47.     /* print a line per count result */
  48.     for (i = 0; i < maxval; ++i) {
  49.         printf(" %2d |", maxval - i);
  50.         for (j = 0; j <= MAXWORDLEN; ++j) {
  51.             if (length[j] >= maxval - i)
  52.                 printf("  #");
  53.             else
  54.                 printf("   ");
  55.         }
  56.         printf("\n");
  57.     }
  58.  
  59.     /* print bottom line */
  60.     printf("     ");
  61.     for (i = 0; i <= MAXWORDLEN; ++i)
  62.         printf("---");
  63.     printf("-\n");
  64.  
  65.     /* print the word lengths */
  66.     printf("     ");
  67.     for (i = 0; i <= MAXWORDLEN; ++i)
  68.         if (i != MAXWORDLEN)
  69.             printf(" %2d", i+1);
  70.         else
  71.             printf(" %2d>", i);
  72.     printf("\n");
  73.  
  74.     return(0);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment