練習 3(提出プログラム名:p1403a.c)
まず,このプログラム(p1403a.c)をダウンロードしなさい.
p1403a.c では 1 つの文字列を読み込み,それを逆順に書き換えて出力しようとしている.
具体的には,main で文字列を読み込んだ後,それを関数 reverse に引数として
渡して内容を逆順に書き換えようとしている.
関数 reverse を完成させなさい.
ただし,関数 reverse の中では,あらかじめ用意されている
3 つの変数(char 変数 c,ポインタ変数 p と q )以外の変数を使ってはいけません.
また,文字列処理に関するライブラリ関数(strlen 等)も使ってはいけません.
【ヒント】
(1) ひとまず p, q とも文字列の先頭を指すようにします:
p = str;
q = str;
(2) 次に,ポインタ q を文字列の末尾(ナル文字)の位置まで移動させます.
※ while か for を使うとよい.
(3) 続いて,ポインタ q を一つ手前の文字の位置に移動させます:
q--;
※この時点で (*p) が先頭文字,(*q) が末尾文字になります.
(4) 無限ループ(while(1) 等を利用)として以下を繰り返す:
(4-1) もし p == q または p == (q+1) ならば break; で繰り返しを終了する.
※上の条件が成立するということは,p と q は同じ位置を指しているか,
または p と q が既に交差した(すれ違った)位置にあることになるので,
文字の入れ替えは終了となる.
さもなくば p と q の指す文字を入れ替える.
(4-2) p++; と q--; を行う.
- 【プログラムの実行例】(その1)※赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)⏎ > univ 入力 = [univ]⏎ 逆順 = [vinu]⏎
- 【プログラムの実行例】(その2)※赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)⏎ > Hello 入力 = [Hello]⏎ 逆順 = [olleH]⏎
- 【プログラムの実行例】(その3)※赤字は実行時にキーボードから入力する内容
文字列を 1 つ入力してください(64文字未満)⏎ > a 入力 = [a]⏎ 逆順 = [a]⏎
【過去にあったミス(減点となり,やり直しを命じられる)】
■ 3種類の実行例を確認せずに提出してしまっている.
■ 出力される文字列が実行例とは違っている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 練習2 (p1402a.c) ]
ミスが無いことを確認したら次の問題へ → [ 練習4 (p1404a.c) ]