練習 [10] 文字列(5/5)

練習 5(提出プログラム名:p1005.c)※必須ではない

この練習問題は必須ではない(提出しなくてもよい)が適切に解けていれば加点の対象とする.

まず,このプログラム(p1005.c)をダウンロードしなさい.
そして,p1005.c を編集して以下の動作を行うプログラムに仕上げなさい.

この問題では,文字列(空白を含まない SIZE-1 文字以下のもの)を読み込んで,その内容を以下のルールに従って変換内容を書き換え)して出力させるものとする(SIZE はマクロで定義されている).
なお,このプログラムでは str 以外の char 配列を用意してはいけません

【変換ルール】
それぞれの文字が
 ① アルファベット大文字の場合は小文字へ変換する.
 ② アルファベット小文字の場合は大文字へ変換する.
 ③ 数字の場合は半角のハイフン(※マイナス)(-)へ変換する.
 ④ 上のいずれでもない場合は変換しない(そのまま).

なお,入力される文字列の長さは SIZE-1 文字以下であると仮定してプログラムを作ってよい.
また,マクロの定義部分以外に 100 (や 99, 98 といった関連する数字)を直接書いてはいけません.

【ヒント】
char 配列 str に格納されている文字列の各文字 str[i] について,
それがアルファベット大文字かどうかは if ( isupper(str[i]) ) で判定できます.
その他も同様で講義スライドの最後のページを参考にしてください.
なお,ハイフン(マイナス)へ変換する場合は単純に '-' で上書きするだけでよいです.
"-" ではなく '-' ですので,囲みに使う記号を間違えないように.

また,文字列内の文字を先頭からチェックしていく場合,
for ( i = 0; i < SIZE; i++ ){ … のように配列内のすべての文字を見る必要はありません
ナル文字より後は見る必要はないので for 文で書くならば,代わりに
for ( i = 0; str[i] != '\0'; i++ ){ … と書くのが良いでしょう.
while 文で書く場合も同様です.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
    ※「変換後」として表示されている内容が,大文字・小文字を含めてすべて正しいか必ず確認せよ
変換元の文字列を入力してください(99文字以下):
tHIS0IS2A9sAMPLE
変換前 [tHIS0IS2A9sAMPLE]
変換後 [This-is-a-Sample]
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
変換元の文字列を入力してください(99文字以下):
c8pROGRAM./.C3fILE
変換前 [c8pROGRAM./.C3fILE]
変換後 [C-Program./.c-File]

【過去にあったミス(減点となり,やり直しを命じられる)】
2 種類の実行例を確認せずに提出してしまっている.
 例えば,大文字と小文字が逆であったり,数字がそのまま出力されたりしている.
ナル文字を別の文字で上書きしてしまい,出力の際に文字化けが起きている.
■ マクロ SIZE の定義部分以外に 直接 10099, 98 等と書いてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第10回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p1001.c ~ p1005.c を Moodle から提出してください.※ただし,p1005.c は必須ではないです.
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,コンパイルエラーや無限ループになるプログラムを 1 個でも提出した場合は総合評価を 0 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.