暗号変換


あいお  2010-11-17 23:20:26  No: 72057

次のように変換されるプログラムがある。I_am_A_STUDENT_!→E_am_W_OPQZAJP_!(_はスペースとする)この法則を解読し、DKS_was_PDA_PKZWU'O_ATWI_?をもとの文章に変換するプログラムを作成する

#include <stdio.h>
char trans (char moji);
int main (void)
{
  int i=0;
  int num=0;
  char moji[256]="DKS was PDA PKZWU'O ATWI ?";
  printf("%s\n", moji);
  while (moji[num]!='\0')
  {
    num++;
  }
    for (i=0; i<num; i++)
  {
    if(/*(2)*/)
    {
      moji[i]=trans(moji[i]);
    }
  }
  printf("%s\n", moji);
  return 0;
}
char trans(char moji)
{
  /*(3)*/
  return moji;
}

(2)と(3)にいれるプログラムを教えて下さい。
お願いします。


瀬戸っぷ  2010-11-18 00:00:27  No: 72058

課題は自分でやりましょうね……

パッとみた感じでは大文字に限定したシーザー暗号っぽいですが。


KING・王  2010-11-19 10:26:07  No: 72059

下記のように、瀬戸っぷさんの書かれているように、大文字限定のシーザー暗号のようですね。

I => E :EFGHI
A => W :WXYZA
S => O :OPQRS

(2)は、変換対象である大文字であるかどうかを判定する文が入る。
(3)は、上記の変換法則が入る。

これをC言語で記述すればOKです。


瑞希  URL  2010-11-21 11:41:28  No: 72060

(2)だけですがヒントを。
KINGさんも言っている通り変換対象であるのが大文字なので
大文字である事を検出する関数を使えば問題なく(2)は埋まると
思います。(ただしその関数はstdio.hには含まれていないので
参考書のヘッダに関しての部分などを見るとすぐ見つかるはずです。)


bitter_fox  2010-11-25 23:30:15  No: 72061

ではヒントを、

変換前の文字から変換後の文字へは、四文字戻します。又、
変換後の文字から変換前の文字へは、逆に四文字進めます。

そして、一般的に文字コードは、AをはじめとしてW(0x40から0x5A)まで順番に並んでいます。


bitter_fox  2010-11-25 23:36:56  No: 72062

>>ではヒントを
では、私もヒントを

「私も」が抜けてて日本語として変ですね(笑)。

ヒントは(3)に関してです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加