課題 [11] ポインタ②(7/9)

問 7(提出プログラム名:ex1107a.c)

このプログラム(ex1107a.c)をダウンロードし,以下の動作をするプログラムに仕上げなさい
ただし,ダウンロードしたプログラムでは,手順(1)と(5)だけは実装済みとなっている.

【目的の処理内容】
(1)文字列を str として読み込む(実装済).
(2)str の内容を clone という別の char 配列へコピーする.
(3)clone の内容のうち,アルファベットの大文字と小文字を入れ替える(書き換える).
   ※以下に示す【よくあるミス】に該当するミスを犯さないよう注意せよ.
(4)clone の内容を str の末尾へ追加する.
(5)str の内容を出力する(実装済).

なお,このプログラムでは講義で紹介した strcpy, strcatisupper, toupper
自由に使って良いものとする.

【よくあるミス】
上の手順(3)は文字列を先頭から 1 文字ずつ見ていって,大文字ならば小文字へ,
小文字ならば大文字へという変換(いずれでもない場合は何もしない)を繰り返す
わけですが,
  for ( int = 0; i < SIZE; i++ )
という for 文を書いてしまう人が例年いますが一部無駄があります.

この問題では「文字列」を扱っているので,ナル文字('\0')までが有効な内容ですので
この for 文は
  for ( int i = 0; clone[i] != '\0'; i++ )
と書くのが正解です.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください:JanFeb
変換したものを後ろにつなげると: [JanFebjANfEB]

  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください:ABCDE
変換したものを後ろにつなげると: [ABCDEabcde]

  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください:Ehime123
変換したものを後ろにつなげると: [Ehime123eHIME123]

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
■ コピー元の str の内容について大文字と小文字を入れ替えてしまっている.
strcpy や strcat を使って良いのに対応する処理を自前で書こうとして無駄に複雑化している.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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