英字の出現回数

#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]){
    
    int c[128];  //回数記録用
    int ch;  //文字読み込み用
    
    for(ch= 0;ch!=128; ch++) c[ch]= 0;  //初期化

//読んでみて読めたら小文字化して回数記録
    for(; (ch= getchar())!=EOF;){
        c[tolower(ch)]++;
    }

//回数を記録した配列のaから初めてzまで繰り返し
    for(ch= 'a'; ch<='z'; ch++){
        if( c[ch]!=0 )  //回数が記録されてたら
        printf("%c:%d\n", ch, c[ch]);  //出力
    }
    
    return 0;
}

出現回数記録用の配列と入力文字読み込み用の変数を用意
配列の数128はアスキーコードの数(0〜127)

とりあえず配列を0で初期化

読めた文字の出現回数を記録
++で増やしていく
tolower関数で読み込んだ文字を小文字変換してからカウントする事で大文字小文字区別しない

配列のa(アスキーコード97)から、z(アスキーコード122)まで
出現回数がカウントされてたら
(配列の中身が0でなかったら)
その配列の文字とカウント数を出力

小文字部分しか使わないけどアスキーコードで割り振った方が簡単かなぁ

この記事が気に入ったらサポートをしてみませんか?