-9

メッセージ :mmZ\dxZmx]Zpgyを対応するASCII番号に変換するコンバーターを作成する必要があります。この式を使用します

if(OriginalChar+Key > 126)
    EncryptedChar = 32 + ((OrgiginalChar + Key) - 127);
else
    EncryptedChar = (OrginalChar + Key);

この問題の鍵は 1 から 100 までの任意の数であるため、意味のあるメッセージが作成されるまで、考えられるすべての鍵を使用して数式を試行する必要があります。

だから、誰かが私が間違っていることを教えてくれるか、正しい方向に向けることができますか

#include <iostream>
#include <cstdlib>

using namespace std;

void converter(char OriginalChar, int Key);

int main()
{
    char OriginalChar[16] = ":mmZ\\dxZmx]Zpgy";
    int Key;

    converter((int)OriginalChar, Key);

    system("pause");
    return 0;

}

void converter()(char OriginalChar, int Key)
{
    char answer;

    for (Key = 0; Key <= 100; Key++)
    {
        if (OriginalChar - Key < 32)
        {
            answer = (((OriginalChar - Key) + 127) - 32);
        }
        else
        {
            answer = (OriginalChar - Key);
        }
        cout << (char)answer;
    }
}
4

1 に答える 1

1

問題の 1 つは、文字の配列全体を単一の整数にキャストしていることです。整数に 16 文字すべてを含めることはできないため、これを行うのは非常に困難です。
見る: converter((int)OriginalChar, Key);

また、converter機能は何をすることになっていますか?
変数名は、元の文字 (暗号化前) を渡していることを示していますが、元の文字はなく、暗号化された文字があります。

値のコピーを渡しているのに、ループ内Keyで完全に上書きしているのはなぜですか? for参照渡ししたいですか?

編集 1:おそらくループ内
に呼び出しを入れたい:converterfor

for (unsigned int i = 0; i < sizeof(OriginalChar); ++i)
{
    converter(OriginalChar[i], Key);
}
于 2013-04-18T00:37:38.977 に答える