|
「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 となるのです。 理解できましたでしょうか? 理解できたら、上記で、b の配列を使わず、c の配列のみを使って、 種類と個数を格納するようにしてみてください 「kadai071」
文字列を入力し、その種類と、個数を表示する (種類と数を一つの配列を使って数える。数え終わってから、結果だけを表示) |

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





