問 3(提出プログラム名:ex1103a.c)
このプログラム(ex1103a.c)をダウンロードし,その中の関数 letter_change_copy を完成させなさい.ただし,この問題では講義資料で紹介している strcpy を使ってはいけません.
関数 letter_change_copy は,引数で与えられたポインタ to と from を使い,
ポインタ from が参照している文字列(char 配列)を
ポインタ to が参照している char 配列へ先頭から 1 文字ずつ末尾までコピーするものとする.
ただし,その際には大文字は小文字として,逆に小文字は大文字としてコピーするものとする.
to:コピー先の char 配列を参照するポインタ
from:コピー元の char 配列を参照するポインタ
なお,to へ 1 文字ずつコピーし終わった後に,ナル文字 '\0' を書き込むのを忘れないこと.
これを忘れると文字化けが起こってしまう可能性が高い.
【注意】
この問題では関数 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 上でインデントを自動で揃える作業をやっていない).
以上の 3 問は明日(7/5)の 16時までに提出を済ませてください.
(ex1101a.c ~ ex1103a.c を Moodle から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.なお,コンパイルエラーや無限ループが含まれる場合は総合評価を 0 点とします.
提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.
← [ 問 1 (ex1101a.c) ]
← [ 問 2 (ex1102a.c) ]
次のページ以降に問 4 ~問 9 があります.
問 4 以降を明日の16時までに早期提出した場合は加点の対象とします
(一部のみを早期提出してもよいです).
※なお,明らかに間違っている(まともに動かない)プログラムを早期提出するのは絶対にやめてください.不正に加点を得ようとした行為と見なして減点とします.
次の問題へ → [ 問4 (ex1104a.c) ]