- 締切済み
文字の入れ替えについて
C言語まったくの初心者です。 文字の入れ替えについてなんですがよくわかりません。 キーボードから文字列を入力させてその先頭の文字と最後の文字を入れ替えるようなものを作りたいんですが。 VWXYZ → ZWXYV のような感じにしたいんです。 参考書だとよくわかりません。 わかるかたおねがいします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Prog_HIGE
- ベストアンサー率33% (1/3)
Cnetuserさんへ。 fgetsを用いてファイルから文字列を読み込み、 最初と最後の文字列を入れ替えるという作業について、回答させていただきます。 前回の回答の (1)に関して、ファイルに記述されているのは文字で、文字は1バイトのchar型データであるとします。 (2)に関して、一時保存用のchar tmpを作成します。 また、読み込み対象のファイルはCドライブにout.txtという名前で保存されている仮定し(プログラム中のC:\\out.txtに相当)、 中にはVWXYZという文字が文頭に記述されているとします。 すると以下のプログラムで目的の動作が果たせると思います。 int main( ) { FILE *fp ; char vc[ 6 ] ; char tmp ; fp = fopen( "C:\\out.txt", "r" ) ; fgets( vc, 6, fp ) ; tmp = vc[ 0 ] ; vc[ 0 ] = vc[ 4 ] ; vc[ 4 ] = tmp ; printf( "%s", vc ) ; return 0 ; } 当然ですが、このプログラムも実用性や信頼性が皆無です。 問題点の発掘、改良はご自分で行っていただけると幸いです。 以上で言葉足らずですが、回答とさせていただきます。
- asuncion
- ベストアンサー率33% (2127/6289)
> printf( "必ず入力はa~zの間で5文字行ってください : " ) ; 5文字入力するのであれば、終端の'\0'を含めて、 領域は6バイト必要だと思います。
- Prog_HIGE
- ベストアンサー率33% (1/3)
C言語は慣れるまではなかなかソースや入門書を読んでも直感的に分かりづらいものですよね^^; 以下では配列で定義されたデータの概念は分かっていると仮定して話を進めさせていただきたいと思います。 C言語などのプログラムで数字や文字を入れ替える場合には次の二点を 守る事が基本的な考え方を身に着ける方法ではないかと思います。 (1)入れ替える対象が文字なのか数字なのかを考える (2)入れ替え作業のためにデータの一時保存用の変数を確保する です。 (1)に関して、今回の場合はおそらく文字で、一文字が1バイトのchar型データであると思われます。 (2)に関して、一文字がchar型のデータですから、データの一時保存用の変数をchar tmpとして作成しましょう。 そして、キーボードから入力された文字が保存される配列をchar vc[5];というデータであると仮定します。 すると,文字Vはvc[0]に、文字Zはvc[4]に保存されますから、次の3つの手順を踏んでデータの入れ替え作業を行います (1)上で定義したtmpにvc[0]を一時保存する (2)vc[0]にvc[4]を代入する (3)vc[4]にtmpを代入する 以上の作業で0番目と4番目のデータの入れ替えが完了します。 もし、(2)の作業を最初にやってしまうと、vc[0]もvc[4]も同じ文字になってしまうので、入れ替える事が出来なくなりますね? つまり、データの入れ替え作業では、入れ替えを行う前に、いったん入れ替え対象となるどちらかのデータを一時保存しておく必要があるということです。 以下には簡単に最初の文字と最後の文字を入れ替えるプログラムの例を示します。 int main( ) { char vc[ 5 ] ; char tmp ; printf( "必ず入力はa~zの間で5文字行ってください : " ) ; scanf( "%s", vc ) ; tmp = vc[ 0 ] ; //(1)に相当 vc[ 0 ] = vc[ 4 ] ; //(2)に相当 vc[ 4 ] = tmp ; //(3)に相当 printf( "%s", vc ) ; return 0 ; } ただし、上のプログラムは実用性や信頼性が皆無です。何がいけないのかは今後C言語についてたくさん勉強してご自分で考えていただけたら幸いです。 以上を言葉足らずですが回答とさせていただきます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
1 char x; char y; の互いの内容を入れ替えるコードは書けますか? 2 同様に char str[5]; があるとき、str[0] と str[3] を入れ替えるコードは書けますか? 3 [2]ができるなら簡単ですね、str[0]とstr[末端のインデクス] を入れ替えてください。
- asuncion
- ベストアンサー率33% (2127/6289)
途中まででもよいので、その機能を実現するためのコードを書かれましたか? それとも、にっちもさっちもいかない状態ですか?
補足
くわしくありがとうございます。 なんとかうごかすことができました。 ずうずうしいとは思いますが。scanfを使わずfgetsでやる 方法はどうすればいいのでしょうか?よろしくおねがいします。