#include<stdio.h>

#define STLING_MAX 1200

#define ALPHABET 26

#define ASCII_A 65

#define ASCII_Z 90

#define ASCII_a 97

#define ASCII_z 122

#define SHARE_L_S 0x1f

#define DIFF 1

#define LOOP_RESET 0

#define ARRY_RESET 0

#define COUNT_RESET 0

#define COUNT 1

#define RESET 0

unsigned short s_scan_sentence(unsigned char * str, unsigned short length_max);

void s_count_alphabet(unsigned char * str, unsigned short * num_check, unsigned short length);

int main(){

        unsigned short usW_D_length;                        /* 文字列長格納の変数 */

        unsigned char ubW_D_str[STLING_MAX];                /* 文字列格納の配列 */

        unsigned short usW_D_num_check[ALPHABET];           /* アルファベットの数を記録する配列 */

        unsigned short usW_C_i;                             /* ループ変数 */

        

        /* 文字列配列の初期化 */

        for(usW_C_i = LOOP_RESET;usW_C_i < STLING_MAX;usW_C_i++){

                ubW_D_str[usW_C_i] = ARRY_RESET;

        }

        /* アルファベットの数を記録する配列の初期化 */

        for(usW_C_i = LOOP_RESET;usW_C_i < ALPHABET;usW_C_i++){

                usW_D_num_check[usW_C_i] = ARRY_RESET;

        }

        

        /* 文字列入力 */

        usW_D_length = s_scan_sentence(ubW_D_str, STLING_MAX);

        

        /* アルファベットの数をカウント */

        s_count_alphabet(ubW_D_str, usW_D_num_check, usW_D_length);

        

        /* カウントした結果を出力 */

        for(usW_C_i = LOOP_RESET;usW_C_i < ALPHABET;usW_C_i++){

                /* a : (aの個数) の形式で出力 */

                printf("%c : %d\n", (usW_C_i + ASCII_a), *(usW_D_num_check + usW_C_i));

        }

        

        return RESET;

}

/* 関数名：文字列入力 */

/* 概要：文字列を入力する。その長さを返す */

/* 引数：文字列を格納する配列の先頭アドレス、その配列の大きさ */

/* 戻り値：入力された文字列の長さ */

unsigned short s_scan_sentence(unsigned char * str, unsigned short length_max)

{

        unsigned short usW_C_count_text = COUNT_RESET;          /* 文字列長カウンタ */

        unsigned short usW_C_i;                                 /* ループ変数 */

        /* 文字列の入力 */

        for(usW_C_i = LOOP_RESET;usW_C_i < length_max;usW_C_i++){

                scanf("%c", str + usW_C_i);

                /* 入力終了の処理 */

                if(*(str + usW_C_i) == EOF){

                        break;

                }

                /* 文字数をカウント */

                usW_C_count_text++;

        }

        /* 文字列長を返す */

        return usW_C_count_text;

}

/* 関数名：アルファベットカウント */

/* 概要：渡された文字列に各アルファベットが何文字含まれるか調べる */

/* 引数：文字列が格納された配列の先頭アドレス、アルファベットの数を記録する配列の先頭アドレス、文字列の長さ */

/* 戻り値：なし */

void s_count_alphabet(unsigned char * str, unsigned short * num_check, unsigned short length)

{

        unsigned short usW_C_i;         /* ループ変数 */

        unsigned char ubW_D_sub;        /* 計算用変数 */

        

        /* 文字列中に各アルファベットが何文字含まれるか調べる */

        for(usW_C_i = LOOP_RESET;usW_C_i < length;usW_C_i++){

                /* アルファベットの場合カウント */

                if(((ASCII_A <= *(str + usW_C_i)) && (*(str + usW_C_i) <= ASCII_Z)) || ((ASCII_a <= *(str + usW_C_i)) && (*(str + usW_C_i) <= ASCII_z))){

                        /* アルファベットを配列の添え字として使える形に加工 */

                        ubW_D_sub = (*(str + usW_C_i) & SHARE_L_S) - DIFF;

                        /* 文字列中に含まれていたアルファベットをカウント */

                        *(num_check + ubW_D_sub) += COUNT;

                }

        }

}




Measured memory_bytes: 2056