/* 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 */
}