練習 [9] 文字列(4/5)

練習 4(提出プログラム名:p0904a.c)

まず,このプログラム(p0904a.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 上でインデントを自動で揃える作業をやっていない).


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