C言語研修

[ リスト ]

注意事項

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


文字の種類と個数8


/*********************************
* kadai071
* 文字列を入力し、その種類と、個数を表示する
* (種類と数を一つの配列を使って数える。数え終わってから、結果だけを表示)
*
* 作成した日:****年**月**日
* 更新した日
*********************************/

main()
{
 char a[5000+1]; /* 配列(入力) */
 short c[256]; /* 配列 */
 int i; /* 全体のカウンタ */

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

 /* 退避の配列を初期化 */
 for ( i = 0; i < 256; i++) {
  c[i] = 0;
 }

 /* 文字コードをカウント */
 i = 0;
 while ( a[i] ) {
  /* 文字コード */
  c[ a[i++] ]++;
 }

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

 かなりスマートになってしまいましたね

 ちょっと解説しましょう

 c[ a[i++] ]++

 c の配列の 添え字が、 a の配列になっていると思います

 これは、c[ j ] とかの j という変数が、a[i] という配列の変数に置き換わっただけです

 どちらも、1つの箱を指定しているだけですね


 次に、

 c[ a[i++] ]++

 ++ が複数でてきているので、分解しましょう ++ が後であるので、式の後に++されます

  c[ a[i] ]++
  i++

 と同じですね。

  c[ a[i] ] = c[ a[i] ] + 1
  i = i + 1

 と同じなので、c の配列をカウントアップしたと、i をカウントアップしているのです


 わかりづらい人は、


  b = a[i];
  c[b] = c[b] + 1;
  i++;

 ととらえてもいいでしょう・・



 どうでしょうか?

 今回思いつきが難しいかったですが、配列の利用テクニックとしては、よく利用されるもの

 なので、身につけておきましょう



 では、次に進みます



文字列の分割


 文字列を分割してみましょう

 たとえば、

http://blogs.yahoo.co.jp/hijiri_shibano/22428400.html

という文字列があったとします

 これを、.(ピリオド) で分割します

  http://blogs
  yahoo
  co
  jp/hijiri_shibano/22428400
  html

 となるわけです

 このように、ある文字を区切りで文字列を分割します

「kadai072」
 文字列を入力し、.(ピリオド) で文字列を分割して表示する

.
ひじり
ひじり
男性 / 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]お得情報

ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!

その他のキャンペーン


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

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

みんなの更新記事