課題 [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' を書き込むのを忘れないこと.これを忘れると文字化けが起こってしまう可能性が高い.

なお,for ( i = 0; i < SIZE; i++ ) といった繰り返しで配列全体をコピーしようとするかもしれないがそれだと無駄が多い.
ここで扱っているのは文字列であるため,先頭からナル文字までをコピーすれば十分である.

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

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

また,コピー先の末尾にナル文字('\0')を書き込むのを忘れないようにしましょう.

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

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


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