- ベストアンサー
簡易暗号化プログラム(文字入れ換え)
char型の配列を使って、入力されたアルファベットのAはNに、BはOに、CはPに・・・とZまで文字を入れ換えるプログラムを作ろうと思ってるのですが、配列の中の文字を変更するにはどうしたらいいですか? 初心者で分からないことだらけですがよろしくおねがいします
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.4 です。 訂正:複合 → 復号 ++++++++++++++++++++++++++++++++++++++ >>配列の中の文字(値)が A から Z までの時に「限り」、13(0x0d) を加えるだけです。 No.4 で述べた、↑のようなプログラム仕様どうのこうの、反省しています。 無用な混乱をさせました。なかったことにして下さい。 >数字も変更されてしまいました。 '0' が '=' になった、ということですよね、「正常」に暗号化されています。 '0' は10進数で、48 という「値」です。これに、13 加えると、61 で、たまたまアスキーコードで、'=' が割り当てられています。 >もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか? その必要性はありません。 ★現状のプログラムで、'q' まで「正常」に暗号化可能です。 ★暗号化後の「新たな配列」を、unsigned char にすれば、'q' 以降だって・・( 'r' + 13 → DEL(0x7F)に注意)。 「もともとの配列」を「入れ換える」のではなく、暗号化後の「新たな配列」を用意すべきです。 cChange[ i ] = cOrg[ i ] + iKey; この cChange[] を int 型にすれば、もっと複雑な「暗号」ができるかも・・(上の「注意」を考えると int にすべき?)。
その他の回答 (5)
- SilverThaw
- ベストアンサー率32% (260/806)
>もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか? No.2でヒントは提示している。
- yama5140
- ベストアンサー率54% (136/250)
>配列の中の文字を変更するにはどうしたらいいですか? 「文字」は下のURLのとおり、「値」でもあります。 http://e-words.jp/p/r-ascii.html によると、 AはNに、は、A(0x41) → N(0x4e) だから差分 13(0x0d) BはOに、は、B(0x42) → O(0x4f) だから差分 13(0x0d) CはPに、は、C(0x43) → P(0x50) だから差分 13(0x0d) (()内の 0x 付き表記は16進数です、以降同じ) で規則性が判明しました、これを用いて、 Z は、Z(0x5a) + 13(0x0d) で g(0x67) >配列の中の文字を変更するにはどうしたらいいですか? 配列の中の文字(値)が A から Z までの時に「限り」、13(0x0d) を加えるだけです。 cStr[ x ] += 0x0d; x 番目の文字コード(中身)に暗号化の数値を加え「文字コード」を変更する。 元々の配列の中身(文字コード)が A から Z 間でない場合については、質問文からは不明で、 例えば、元々の文字配列 gggZgggZZ を暗号化すると、ggggggggg となり複合不能です。 ★「文字コード」と「文字」の対応を、先のURLで確認することで、スッキリすると思います。
補足
>元々の配列の中身(文字コード)が A から Z 間でない場合については、質問文からは不明で、 >例えば、元々の文字配列 gggZgggZZ を暗号化すると、ggggggggg となり複合不能です。 やっと+13して変更することができました! ・・・できましたが、数字も変更されてしまいました。 もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか?
- Interest
- ベストアンサー率31% (207/659)
> アルファベットのAはNに、BはOに、CはPに・・・とZまで文字を入れ換える これだけでは、アルファベットを13文字ずらしたいのだろうということは想像できますが、Zより13前以降のアルファベット、小文字、スペース、数字をどう扱うのかよくわかりません。 とりあえずそういう細かいことは後回しにするとしたら、アスキーコード表をみればどうしたら文字が変わるか見当がつくと思います。例えば、'A'(0x41)を'N'(0x4e)にしたいなら、'A'+13 すればいい。 > その各配列に代入する方法を質問しにきました・・・ こういうことをしたいのではなくて? char plane[5] = "ABCD"; char cipher[5]; for(i=0; i<4; i++){ cipher[i] = plane[i] + 13; } cipher[4] = '\0'; // 文字列として締める(これも暗号化するの?)
- SilverThaw
- ベストアンサー率32% (260/806)
わざとぼかしているので、足りない部分は自分で補うこと char moto[]; char ato[]; char key[26 * 2] = {NOC…noc…}; if( ('A' <= moto[]) && (moto[] <='Z') ) { ato[] = key[moto[] - 'A']; } else { ato[] = key[moto[] - 'a']; }
- Tacosan
- ベストアンサー率23% (3656/15482)
配列の各要素に代入すれば「配列の中の文字を変更」できます.
補足
すみません、その各配列に代入する方法を質問しにきました・・・ 言葉不足で申し訳ないです
お礼
遅れましたが、ありがとうございました 無事解決しました