1-13 histgram.c

とりあえず集計する単語の長さは1〜10文字に。あとはその他扱い。

/*
 * P29 演習1-13
 *   入力した単語の長さをヒストグラム(度数分布図)にしてプリントする
 *   プログラムを書け。ヒストグラムは横に書くほうが簡単だが、縦書きに
 *   挑戦してみるのもよい。
 *
 *         2007/05/22 arikui
 */

#include <stdio.h>

#define TRUE    1
#define FALSE   0

#define WORD_LENGTH_LIMIT 10

int main(void){
    int c, i, j, len, fl_nl;            /* FLag; last output is New Line */
    int count[WORD_LENGTH_LIMIT + 1];   /* count[0]; over 10-length word */
    
    
    for(i = 0; i < (WORD_LENGTH_LIMIT + 1); i++)
        count[i] = 0;
    len = 0;
    fl_nl = FALSE;
    
    
    while((c = getchar()) != EOF){
        if (c == ' ' || c == '\t' || c == '\n'){
            if (fl_nl == FALSE){
                if (len > WORD_LENGTH_LIMIT)
                    ++count[0];
                else
                    ++count[len];
            }
            len = 0;
            fl_nl = TRUE;
        }else{
            ++len;
            fl_nl = FALSE;
        }
    }
    
    
    printf("length : times\n");
    for(i = 1; i < (WORD_LENGTH_LIMIT + 1); i++){
        printf("%6d : ", i);
        for(j = 0; j < count[i]; j++) putchar('*');
        putchar('\n');
    }
    
    printf("over10 : ");
    for(j = 0; j < count[0]; j++) putchar('*');
    putchar('\n');
    
    
    return 0;
}