次のように変換されるプログラムがある。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)にいれるプログラムを教えて下さい。
お願いします。
課題は自分でやりましょうね……
パッとみた感じでは大文字に限定したシーザー暗号っぽいですが。
下記のように、瀬戸っぷさんの書かれているように、大文字限定のシーザー暗号のようですね。
I => E :EFGHI
A => W :WXYZA
S => O :OPQRS
(2)は、変換対象である大文字であるかどうかを判定する文が入る。
(3)は、上記の変換法則が入る。
これをC言語で記述すればOKです。
(2)だけですがヒントを。
KINGさんも言っている通り変換対象であるのが大文字なので
大文字である事を検出する関数を使えば問題なく(2)は埋まると
思います。(ただしその関数はstdio.hには含まれていないので
参考書のヘッダに関しての部分などを見るとすぐ見つかるはずです。)
ではヒントを、
変換前の文字から変換後の文字へは、四文字戻します。又、
変換後の文字から変換前の文字へは、逆に四文字進めます。
そして、一般的に文字コードは、AをはじめとしてW(0x40から0x5A)まで順番に並んでいます。
>>ではヒントを
では、私もヒントを
「私も」が抜けてて日本語として変ですね(笑)。
ヒントは(3)に関してです。
ツイート | ![]() |