/* Part6 演習問題6 */ /* 英字の出現頻度 */ #include <stdio.h> int main(void) { char buf[80] ; int n,t ; int freq[26] ; /* 英字の出現頻度 */ int i ; printf("\n文字列を入力してください(80文字以内,改行文字のみで終了)。\n") ; for(i=0;i<26;i++) freq[i]=0 ; while(1) { for(n=0;n<80;n++) { scanf("%c",&buf[n]) ; if(buf[n]=='\n') { buf[n]='\0' ; /* 改行文字は空文字に置き換え */ break ; } } if(n==80) buf[79]='\0' ; else if (n==0) break ; /* 改行文字のみ入力で終了 */ /* printf("入力文字列: %s\n",buf) ; */ n=0 ; while(buf[n]!='\0') { if((buf[n]>='A')&&(buf[n]<='Z')) buf[n]=buf[n]+32 ; /* 大文字は小文字に変換 */ if((buf[n]>='a')&&(buf[n]<='z')) { i=buf[n]-(int)'a' ; /* 文字'a'から'z'をfreqの要素番号0〜25に割り当て */ freq[i]=freq[i]+1 ; } n++ ; } } printf("\n英字の出現頻度\n") ; t=0 ; for(i=0;i<26;i++) { printf("%c %d\n",(char)(i+(int)'a'),freq[i]) ; t = t + freq[i] ; } printf("全英字数: %d\n",t) ; return(0) ; } |
% gcc -Wall part6-6.c % ./a.out 文字列を入力してください(80文字以内,改行文字のみで終了)。 He is a boy. She is a girl. 英字の出現頻度 a 2 b 1 c 0 d 0 e 2 f 0 g 1 h 2 i 3 j 0 k 0 l 1 m 0 n 0 o 1 p 0 q 0 r 1 s 3 t 0 u 0 v 0 w 0 x 0 y 1 z 0 全英字数: 18 |