• ベストアンサー

簡易暗号化プログラム(文字入れ換え)

char型の配列を使って、入力されたアルファベットのAはNに、BはOに、CはPに・・・とZまで文字を入れ換えるプログラムを作ろうと思ってるのですが、配列の中の文字を変更するにはどうしたらいいですか? 初心者で分からないことだらけですがよろしくおねがいします

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.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 にすべき?)。

masa4488
質問者

お礼

遅れましたが、ありがとうございました 無事解決しました

その他の回答 (5)

回答No.5

>もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか? No.2でヒントは提示している。

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

>配列の中の文字を変更するにはどうしたらいいですか?  「文字」は下の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で確認することで、スッキリすると思います。

masa4488
質問者

補足

>元々の配列の中身(文字コード)が A から Z 間でない場合については、質問文からは不明で、 >例えば、元々の文字配列 gggZgggZZ を暗号化すると、ggggggggg となり複合不能です。 やっと+13して変更することができました! ・・・できましたが、数字も変更されてしまいました。 もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか?

  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

> アルファベットの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'; // 文字列として締める(これも暗号化するの?)

回答No.2

わざとぼかしているので、足りない部分は自分で補うこと 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)
回答No.1

配列の各要素に代入すれば「配列の中の文字を変更」できます.

masa4488
質問者

補足

すみません、その各配列に代入する方法を質問しにきました・・・ 言葉不足で申し訳ないです