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

問 4(提出プログラム名:ex1204.c)

このプログラム(ex1204.c)をダウンロードし,その中の関数 letter_change_copy を完成させなさい.ただし,この問題では講義で紹介した strcpy を使ってはいけません
なお,入力される文字列はすべてアルファベットであると仮定してプログラムを作ってよいものとする.

【関数 letter_change_copy の仕様】
引数で与えられたポインタ tofrom を使い,
ポインタ from が参照している文字列(char 配列)
ポインタ to が参照している char 配列へ先頭から 1 文字ずつ末尾までコピーする
ただし,その際には大文字は小文字へ変換して,逆に小文字は大文字へ変換してコピーするものとする.
  toコピー先の char 配列を参照するポインタ
  fromコピー元の char 配列を参照するポインタ
なお,to1 文字ずつコピーし終わった後に,'\0' を書き込むのを忘れないこと.
これを忘れると文字化けが起こってしまう可能性が高い.

【注意】
この問題では関数 main の内容は一切書き換えないこと.
あわせて,関数 strcpy を使ってはいけません

【ヒント】
ある文字(1文字)が大文字かどうか・小文字かどうかはそれぞれ
以前学んだ関数 isupper, islower で判定できます.
また,大文字への変換と小文字への変換もそれぞれ関数 toupper, tolower で行えます.
忘れてしまっているようであれば「文字列」の回の講義資料やプログラムを見直してみましょう.

【例年よくあるミス】
(その1)コピー先の末尾にナル文字('\0')を書き込むのを忘れる人がいます.
(その2)仕様を勘違いして,letter_change_copy の中に printf を書いてしまう人がいます.
(その3)for ( i = 0; i < SIZE; i++ ) といった繰り返しで配列全体をコピーしようとする人がいますが,それは無駄です.ここで扱っているのは文字列であるため,先頭からナル文字までをコピーすれば十分です.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    コピー操作の最後で to の末尾に '\0' を書き込んでいないとコピー先文字列の出力において, > の左で文字化けが起こることがあるので注意せよ.文字化けするプログラムを提出しないこと!
文字列を 1 つ入力してください:EhimeUniv
コピー元の文字列:<EhimeUniv>
コピー先の文字列:<eHIMEuNIV>

  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください:Moodle
コピー元の文字列:<Moodle>
コピー先の文字列:<mOODLE>

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
 (例1)コピー先がコピー元と全く同じになっている.
 (例2)コピー先の末尾にナル文字('\0')を書き忘れていて文字化けが起こっている.
main 関数を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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