C言語研修

[ リスト ]

注意事項

 まとめました、ここ を参照してください


文字の種類と個数4


「kadai070」
 文字列を入力し、その種類と、個数を表示する
 (種類の特定と数を同時にかぞえていく)


 同時に数えるということは、数をどこかに、退避しておかないと

 あとでみれません。


 よって、種類を退避する配列とは別に数を持っている配列を用意しましょう


/*********************************
* kadai070
* 文字列を入力し、その種類と、個数を表示する
* (種類の特定と数を同時にかぞえていく)
*
* 作成した日:****年**月**日
* 更新した日
*********************************/

main()
{
 char a[5000+1]; /* 配列(入力) */
 char b[255+1]; /* 配列(種類の退避) */
 short c[255]; /* 配列 */
 int i; /* 全体のカウンタ */
 int j; /* 重複確認するカウンタ */
 int cnt; /* 重複数 */

 /* 入力 */
 scanf("%s",&a[0]);

 /* 退避の配列を初期化 */
 for ( i = 0; i < 255+1; i++) {
  b[i] = '\0';
 }

 /* 重複を確認 */
 i = 0;
 cnt = 0;
 while ( a[i] ) {
  /* 過去を確認(初回は、forの条件よりスキップされる) */
  j = 0;
  while ( b[j] ) {
   if ( b[j] == a[i] ) {
    break;
   }
   j++;
  }
  /* 重複していなければ退避 */
  if ( !b[j] ) {
   b[j] = a[i];
   c[j] = 1;
  } else {
   c[j]++;
  }

  i++;
 }

 /* 表示 */
 i = 0;
 while ( b[i] ) {
  printf("%c が %d 個\n",b[i],c[i]);
  i++;
 }
}


 ポイントは、種類というのは文字コードの種類なので、0〜255の256種類しか

 ありません。終端を '\0' としているため、この文字コードは、種類の一つとして

 カウントされません。

 なので、画面に表示される可能性のある種類は255種類しかありえません

 
 b の配列 で 255+1 が必要な領域となります



 同じ要素数の配列を、種類の数として必要になりますが、こちらは、終端を意識しなくていいので

 要素数は、255 です


 型は、short ですが、文字列が5000文字なので、最大同じ文字コードを5000回

 入力されるようになります。5000までカウントできるとした場合、適しているのは

 short または、unsignend short となるのです。



 理解できましたでしょうか?





文字の種類と個数5


 理解できたら、上記で、b の配列を使わず、c の配列のみを使って、

 種類と個数を格納するようにしてみてください

「kadai071」
 文字列を入力し、その種類と、個数を表示する
 (種類と数を一つの配列を使って数える。数え終わってから、結果だけを表示)

.
ひじり
ひじり
男性 / A型
人気度
Yahoo!ブログヘルプ - ブログ人気度について
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

過去の記事一覧

よしもとブログランキング

もっと見る

[PR]お得情報

話題の新商品が今だけもらえる!
ジュレームアミノ シュープリーム
プレゼントキャンペーン
ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事