战争家庭作业的ASCII国家

时间:2013-04-17 23:36:16

标签: c++

我必须制作一个转换器,将消息: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;
    }
}

1 个答案:

答案 0 :(得分:1)

您的一个问题是您将整个字符数组转换为单个整数。这是非常棘手的事情,因为整数不能包含所有16个字符 看到:     converter((int)OriginalChar, Key);

此外,converter函数应该做什么?
变量名称表示您正在传递原始字符(加密前),但是,您没有原始字符,而是加密字符。

为什么要传递Key值的副本,但在for循环中完全覆盖它? 你想通过引用传递它吗?

编辑1:
也许你想把converter的调用放在for循环中:

for (unsigned int i = 0; i < sizeof(OriginalChar); ++i)
{
    converter(OriginalChar[i], Key);
}