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

  1. 本実行例では,演習問題5と同じ文字列を2行分入力している.
  2. 英字は全体で18文字あり,その出現頻度は’a’が2,'b'が1などとなっている.