練習 [14] 後半の復習(3/5)

練習 3(提出プログラム名:p1403a.c)

まず,このプログラム(p1403a.c)をダウンロードしなさい.
p1403a.c では 1 つの文字列を読み込み,それを逆順に書き換えて出力しようとしている.

具体的には,main で文字列を読み込んだ後,それを関数 reverse に引数として
渡して内容を逆順に書き換えようとしている.
関数 reverse を完成させなさい.
ただし,関数 reverse の中では,あらかじめ用意されている
3 つの変数(char 変数 c,ポインタ変数 pq )以外の変数を使ってはいけません
また,文字列処理に関するライブラリ関数(strlen 等)も使ってはいけません

【ヒント】
(1) ひとまず p, q とも文字列の先頭を指すようにします:
  p = str;
  q = str;

(2) 次に,ポインタ q を文字列の末尾(ナル文字)の位置まで移動させます.
 ※ whilefor を使うとよい.

(3) 続いて,ポインタ q を一つ手前の文字の位置に移動させます:
  q--;
 ※この時点で (*p) が先頭文字,(*q) が末尾文字になります.

(4) 無限ループ(while(1) 等を利用)として以下を繰り返す:
  (4-1) もし p == q または p == (q+1) ならば break; で繰り返しを終了する.
      ※上の条件が成立するということは,pq は同じ位置を指しているか,
       または pq が既に交差した(すれ違った)位置にあることになるので,
       文字の入れ替えは終了となる.
    さもなくば pq の指す文字を入れ替える.
  (4-2) p++;q--; を行う.
  

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)
> univ
入力 = [univ]
逆順 = [vinu]
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)
> Hello
入力 = [Hello]
逆順 = [olleH]
  • 【プログラムの実行例】(その3)赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)
> a
入力 = [a]
逆順 = [a]

【過去にあったミス(減点となり,やり直しを命じられる)】
3種類の実行例を確認せずに提出してしまっている.
出力される文字列が実行例とは違っている
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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