|
/*********************************
* 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」
文字列を入力し、.(ピリオド) で文字列を分割して表示する |

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- ソフトウェア




