課題 [12] ポインタ②(5/9)

問 5(提出プログラム名:ex1205.c)

このプログラム(ex1205.c)をダウンロードし,
講義で紹介した関数 strcatstrlen を使って次の手順で処理を行うプログラムとして仕上げなさい
ただし,手順(1)〜(3)は既に完成している.

【手順】
(1)char 配列 str の内容を空文字列で初期化する(実装済).
(2)文字列を word として読み込み,その内容を str の末尾に追加する(実装済).
(3)この時点での str の内容と文字数を出力する(実装済).
(4)str文字数が 20 未満である限り
  以下の(4a),(4b),(4c)を繰り返す:
  (4a)str の末尾に 1 文字分の空白(" ")を追加する.
  (4b)手順(1)と同様に新しい文字列word として読み込み,
     その内容を str末尾に追加する.
  (4c)手順(2)と同様に str内容と文字数を出力する.
     ここでは上で追加した空白文字の分も文字数としてカウントされるがそれでよい

【ヒント】
str の文字数が 20 未満である限り」は次の while 文で書くとよいです:
 while ( (int)strlen(str) < 20 )

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    実行例にあるように Thisis の間には空白が必要なのでそれを忘れないこと!
文字列を入力してください:This
これまでの文字列:[This] (4文字)
文字列を入力してください:is
追加後の文字列:[This is] (7文字)
文字列を入力してください:a
追加後の文字列:[This is a] (9文字)
文字列を入力してください:sample
追加後の文字列:[This is a sample] (16文字)
文字列を入力してください:program
追加後の文字列:[This is a sample program] (24文字)

※結果的に 20 文字以上になっているが,これは「sample」を追加して表示した時点では 16 文字であったために手順 4 での繰り返しが続行され,その次の「program」を追加して表示した後にようやく「20 文字未満」という条件が崩れて終了したためである.

  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
文字列を入力してください:This-is-a-sample-program
これまでの文字列:[This-is-a-sample-program] (24文字)

※いきなり 20 文字以上を入力しているため,手順 4 での繰り返しは行われない.

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
 (例1)出力される文字数が違っている.
 (例2)出力される単語と単語の間に途中に空白が入っていない
 (例3)先頭や末尾に不要な空白が出力されてしまっている.
strcatstrlen を使って良いのに,これらに相当する処理を自前で書こうとして無駄に複雑化している.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問 6 (ex1206.c) ]