dポイントプレゼントキャンペーン実施中!

文章の中のアルファベットの種類の出現頻度
をカウントするプログラムをつくっているのですが、
わかりません。
まず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でどうにか表示しようかと思っているのですが、、、
お願いします。

A 回答 (3件)

こんにちは



難しく考えすぎていませんか?
とりあえずフィルタプログラムでサンプルを書いて見ました。
シフト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]);
  }
}
    • good
    • 4
この回答へのお礼

ありがとうございます。

お礼日時:2003/07/24 21:06

とりあえず、下記のプログラムを見る為の参考程度に。



コンピュータ内部で文字を扱う場合、文字は文字コード(すなわち数値)で処理されます。
その為、別のコードで扱われる「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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/08/02 21:09

char c;



for(;;) {
 if (*cp == null) break;
 c = *cp++;
 if (c < 'A') contnue;
 if (c > 'Z') contune;
 number_of_A_to_Z[c-'A']++;
}

未テストです
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/08/02 21:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!