dポイントプレゼントキャンペーン実施中!

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

初心者で分からないことだらけですがよろしくおねがいします

A 回答 (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 にすべき?)。
    • good
    • 1
この回答へのお礼

遅れましたが、ありがとうございました

無事解決しました

お礼日時:2009/09/29 19:35

>もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか?


No.2でヒントは提示している。
    • good
    • 0

>配列の中の文字を変更するにはどうしたらいいですか?



 「文字」は下の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の間のみの場合にする場合はどうすればいいのでしょうか?

補足日時:2009/07/25 03:03
    • good
    • 0

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

わざとぼかしているので、足りない部分は自分で補うこと


char moto[];
char ato[];
char key[26 * 2] = {NOC…noc…};
if( ('A' <= moto[]) && (moto[] <='Z') )
{
 ato[] = key[moto[] - 'A'];
}
else
{
 ato[] = key[moto[] - 'a'];
}
    • good
    • 0

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

この回答への補足

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

補足日時:2009/07/24 19:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!