• ベストアンサー

アルファベットをカウント、

文章の中のアルファベットの種類の出現頻度 をカウントするプログラムをつくっているのですが、 わかりません。 まずcpというポインタで動的メモリを確保し そこの中に文章の全文字を格納するところまで はできました。そして、cpを ループカウンタで回して aならa、bならbの数のカウントがしたいのですが、 そこの部分がよくわかりません。 まずchar kind_character[26]; とかにして、aからzまでを格納して 比べたいのです。問題はどうやって aからz、AからZを格納するのか わからないのです。 char kind_character[26]と比較して、 aからAならint number_of_A_to_Z[26]の0番目 の配列に数字を格納したいのです。 またaとAというのは、別に扱われるのでしょうか_ そして、あとはprintfでどうにか表示しようかと思っているのですが、、、 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは 難しく考えすぎていませんか? とりあえずフィルタプログラムでサンプルを書いて見ました。 シフトJIS環境であれば、うまく動くと思います。 Aもaも同じとしてカウントしています。 また、2バイト文字は検査していません。 #include <stdio.h> main() {   int i ;   unsigned count[26] ;   for (i=0 ;i<26 ;i++){     count[i] = 0 ;   }   do {     i = getchar();     if ( i >= 'A' && i <= 'Z' ){       count[i-'A'] ++ ;     } else if ( i >= 'a' && i <= 'z' ){       count[i-'a'] ++ ;     } else if ( ( i >= 0x81 && i <= 0xa0 ) || ( i >= 0xe0 && i <= 0xfd ) ){       getchar();     }   } while ( i != EOF ) ;   for (i=0 ;i<26 ;i++){     printf("%c : %5d\t",'A'+i,count[i]);   } }

amuro_78
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • x_devi_x
  • ベストアンサー率27% (5/18)
回答No.3

とりあえず、下記のプログラムを見る為の参考程度に。 コンピュータ内部で文字を扱う場合、文字は文字コード(すなわち数値)で処理されます。 その為、別のコードで扱われる「a」と「A」は異なる物です。 実際の文字コードについては、参考URLのページ内にある、「JISローマ字(ASCII)・文字コード表」のところを参照するといいと思います。 尚、全角(「a」や「A」等)の場合は、また違うコードになりますので、ご注意下さい。 それから、amuro_78さんのやり方で考える場合、配列に a~z,A~Z の文字を初期値として設定する場合は、 char kind_character_s[]="abc~略~xyz"; //小文字 char kind_character_l[]="ABC~略~XYZ"; //大文字 とするといいと思います。

参考URL:
http://www.ash.or.jp/code/unitbl1.htm
amuro_78
質問者

お礼

ありがとうございます。 aとAは違うのですか、それはしりませんでした。

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.2

char c; for(;;) {  if (*cp == null) break;  c = *cp++;  if (c < 'A') contnue;  if (c > 'Z') contune;  number_of_A_to_Z[c-'A']++; } 未テストです

amuro_78
質問者

お礼

ありがとうございます。 ifのところのcpのアスタリスクはいるのでしょうか?

関連するQ&A

専門家に質問してみよう