N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

1-14.c

演習 1-14 入力中の異なる文字の頻度をヒストグラムにプリントするプログラムを書け。

ひさびさにやってみた。関数はまだ登場しないページだから使わなかった。
大文字小文字を区別しないアルファベット26字と、0〜9の数字ひとまとまり、それ以外で区別して表示。

#include <stdio.h>

main()
{
        int c, i;
        int charcount[28]; /* アルファベット26字+数字(ひとまとめ)+その他 */
        for (i = 0; i <= 27; i++)
                charcount[i] = 0;

        while ((c = getchar()) != EOF) {
                if ((c >= 'a') && (c <= 'z'))
                        charcount[c-'a']++;
                else if ((c >= 'A') && (c <= 'Z'))
                        charcount[c-'A']++;
                else if ((c >= '0') && (c <= '9'))
                        charcount[26]++;
                else
                        charcount[27]++;
        }

        for (i = 0; i <= 27; i++) {
                if (i <= 25) {
                        printf("%c  :", 'A'+i);
                        for (; charcount[i] > 0; charcount[i]--)
                                printf("#");
                        printf("\n");
                } else if (i == 26) {
                        printf("num:");
                        for (; charcount[26] > 0; charcount[26]--)
                                printf("#");
                        printf("\n");
                } else if (i == 27) {
                        printf("oth:");
                        for (; charcount[27] > 0; charcount[27]--)
                                printf("#");
                        printf("\n");
                }
        }
}


$ ./a.out < 1-14.c
A :###################
B :
C :#####################################
D :##
E :##############
F :#####################
G :#
H :################
I :###################################
J :#
K :#
L :#######
M :##
N :#############################
O :####################
P :#########
Q :
R :###########################
S :######
T :##########################
U :##############
V :
W :#
X :
Y :
Z :##
num:##################################
oth:#########################################(後略