/* 31229.c */

/* 入力用ファイルから英文を読み込み、*/

/* 行数・単語数・文字ごとの文字数を出力する。*/

 

#include<stdio.h>

#define   IN   1

#define  OUT   0

#define    M 100

main(){

        FILE *fp1,*fp2;

        int  k=0,nl=0,nw=0,nc=0,ncc=0,tn=0,kk=0;

        int  n_char[M];

        int  status=OUT;

        char c;

 

  /* 準備 */

        fp1=fopen("E:/Cpp/31229A.dat","r");  /* 入力用ファイル */

        fp2=fopen("E:/Cpp/31229B.dat","w");  /* 出力用ファイル */

        for(k=0;k<M;k++)n_char[k]=0;

  /* End */

 

  /* 英文を1文字ずつ読み込んで処理 */

    while((c=getc(fp1))!=EOF){

                ++nc;    /* 空白文字を含むすべての文字数をカウント */

          /* 文字ごとに文字数をカウント */

                     if((c>='0')&&(c<='9')) ++n_char[c-'0'   ];

                else if((c>='A')&&(c<='Z')) ++n_char[c-'A'+10];

                else if((c>='a')&&(c<='z')) ++n_char[c-'a'+40];

                else if((c>='!')&&(c<='/')) ++n_char[c-'!'+70];

                else if((c>=':')&&(c<-'?')) ++n_char[c-':'+85];

                else if((c>='[')&&(c<='_')) ++n_char[c-'['+91];

                else if((c>='{')&&(c<='}')) ++n_char[c-'{'+96];

          /* End */

                if(c=='\n') ++nl;   /* 行数をカウント */

          /* 単語の途中か単語の外かを判断して処理 */

                if((c==' ')||(c=='\n')||(c=='\t')){

                        if(status==IN) putchar('\n');

                        status=OUT;

                }

                else{

                        ++ncc;   /* 空白文字を除く文字数をカウント */

                        putchar(c);

                        if(status==OUT) ++nw;  /* 単語数をカウント */

                        status=IN;

                }

          /* End */

        }

  /* End */

 

  /* ディスプレイとファイルに出力 */

        printf("\n行数:%d , 単語数:%d , (空白文字を除く)キャラクターの数:%d\n\n",nl,nw,ncc);

        fprintf(fp2,"\n行数:%d , 単語数:%d , (空白文字を除く)キャラクターの数:%d\n\n",nl,nw,ncc);

        for(k=0;k<10;k++){

                printf(" %d:%3d    ",k,n_char[k]);

                fprintf(fp2," %d:%3d    ",k,n_char[k]);

                if(( k % 5 ) == 4 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k];

        }

        printf("( 数字の全個数 : %d 個 )\n\n",tn);

        fprintf(fp2,"( 数字の全個数 : %d 個 )\n\n",tn);

        tn = 0;

 

        for(k=0;k<26;k++){

                printf("%c:%3d   %C:%3d  ( 計%3d )      ",'A'+k,n_char[k+10],

                                        'a'+k,n_char[k+40],n_char[k+10]+n_char[k+40]);

 

                fprintf(fp2,"%c:%3d   %C:%3d  ( 計%3d )      ",'A'+k,n_char[k+10],

                                        'a'+k,n_char[k+40],n_char[k+10]+n_char[k+40]);

                if(( k % 2 ) == 1 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k+10] + n_char[k+40];

        }

        printf("( 文字の全個数 : %d 個 )\n\n",tn);

        fprintf(fp2,"( 文字の全個数 : %d 個 )\n\n",tn);

        tn = 0;

 

        for(k=0;k<15;k++,kk++){

                printf("%c:%3d    ",'!'+k,n_char[k+70]);

                fprintf(fp2,"%c:%3d    ",'!'+k,n_char[k+70]);

                if(( kk % 6 ) == 5 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k+70];

        }

        for(k=0;k<6;k++,kk++){

                printf("%c:%3d    ",'!'+k,n_char[k+85]);

                fprintf(fp2,"%c:%3d    ",'!'+k,n_char[k+85]);

                if(( kk % 6 ) == 5 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k+85];

        }

        for(k=0;k<5;k++,kk++){

                printf("%c:%3d    ",'!'+k,n_char[k+91]);

                fprintf(fp2,"%c:%3d    ",'!'+k,n_char[k+91]);

                if(( kk % 6 ) == 5 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k+91];

        }

        for(k=0;k<3;k++,kk++){

                printf("%c:%3d    ",'!'+k,n_char[k+96]);

                fprintf(fp2,"%c:%3d    ",'!'+k,n_char[k+96]);

                if(( kk % 6 ) == 5 ){

                        printf("\n");

                        fprintf(fp2,"\n");

                }

                tn = tn + n_char[k+96];

        }

        printf("\n( 記号の全個数 : %4d 個 )\n\n",tn);

        fprintf(fp2,"\n( 記号の全個数 : %4d 個 )\n\n",tn);

  /* End */

 

  /* 終了処理 */

        fclose(fp1);

        fclose(fp2);

        return(0);

  /* End */

}