- ベストアンサー
暗号文の質問です
暗号文をつくろうとしてつくったのですが、 暗号文をつくることはできたのですが 暗号を元に戻す操作のプログラムを作るのができません。 本のヒントで暗号化を行うか、復号化を行うかはプログラムの開始時点で整数値を入力することにより指定(0を入力すると暗号化、1を入力すると復号化)するらしいです。なんかうまくいかないので教えてもらえるとうれしいです。 #include<stdio.h> int main(void) { char line[100]; int ix; while(gets(line) !=NULL) { ix =0; while(line[ix] !='\0') { if(line[ix]>='A'&&line[ix]<='Y' || line[ix]>='a'&&line[ix]<='y') line[ix] ++; else if(line[ix]=='Z'|| line[ix]=='z') line[ix] =25; ix++; } printf("%s\n",line); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 2.Zまたはzの場合はAsciiコードで25の文字 > ただしこのままだとZかzの入力が分からないですね。 これはですね。たぶん、hiro999911 さんが > line[ix] =25; って入力されている部分 line[ix] -= 25; の間違いだと思います。'Z'-'A' がちょうど 25 ですし。 'Z' --> 'A' と 'z' --> 'a' にしようとしていると 考えられます。 --- 復元化プログラムは if(line[ix]>='B'&&line[ix]<='Z' || line[ix]>='b'&&line[ix]<='Z') line[ix] --; else if(line[ix]=='A'|| line[ix]=='a') line[ix] +=25; ix++; になります。 このプログラムと、質問文にある暗号化プログラムを プログラムの先頭で 「暗号かけますか?復元しますか?」と聞かせて その問いによって分岐すれば、おっけ~です。 # まさか、「プログラムの開始時点で整数値を # 入力することにより指定」というこの部分の # プログラムが分からないんじゃないですよね (^^;) # お使いの本でも省略されているくらい簡単って # ことですよ。
その他の回答 (1)
- piyo2000
- ベストアンサー率49% (144/293)
>暗号化を行うか、復号化を行うかはプログラムの開始時点で整数値を入力することにより指定(0を入力すると暗号化、1を入力すると復号化)するらしいです。 そんな仕組みはこのコードを見る限りありませんが。 暗号化ロジックは 1.A-Y,a-yのとき+1(例:b->c,J->K) 2.Zまたはzの場合はAsciiコードで25の文字 ですね。復号化はこの逆のロジックでいいはずです。 ただしこのままだとZかzの入力が分からないですね。 >なんかうまくいかないので どうやって上手く行かないのかぐらいは書いたほうがいいと思います。
補足
>暗号化を行うか、復号化を行うかはプログラムの開始時点で整数値を入力することにより指定(0を入力すると暗号化、1を入力すると復号化)するらしいです これはこの機能もつけろみたいなかんじでした。 復号化のプログラムとは関係なかったです。 暗号化ロジックの特徴がよくわかりました。ありがとうございました。
補足
とってもありがとうございます。 line[ix] -= 25の部分は気づきませんでした。 復号化プログラムを入れてやってみたのですが error C2018: 文字 '0x81' は認識できません。 error C2018: 文字 '0x40' は認識できません。 error C2018: 文字 '0x81' は認識できません。 error C2018: 文字 '0x40' は認識できません。 error C2018: 文字 '0x81' は認識できません。 error C2018: 文字 '0x40' は認識できません。 とでてしまいました。 このエラーの意味もわからずがんばって調べてます。