C++ 凯撒密码包装

C++ 凯撒密码包装,c++,encryption,caesar-cipher,C++,Encryption,Caesar Cipher,我想做一个凯撒密码,但我不知道如何包装它。除了包装外,一切都是正确的。我还想保持特殊字符的原样,而不改变它们 代码如下: int main() { char message[100], ch; int i, key; char *p = message; cout << "Encrypted message: " << message; return 0; } intmain() { char消息[100],ch; int i,键; c

我想做一个凯撒密码,但我不知道如何包装它。除了包装外,一切都是正确的。我还想保持特殊字符的原样,而不改变它们

代码如下:

int main()
{
    char message[100], ch;
int i, key;

char *p = message;

cout << "Encrypted message: " << message;

return 0;
}
intmain()
{
char消息[100],ch;
int i,键;
char*p=消息;

cout若要环绕,可以将需要环绕的字符视为特殊情况:

if (message[i] < 'A') message[i] += 'Z' - 'A' + 1; //Wrap back to end of alphabet
if (message[i] > 'Z') message[i] -= 'Z' - 'A' + 1; //Wrap forward to start of alphabet
if(message[i]<'A')message[i]+='Z'-'A'+1;//返回到字母表的末尾
if(message[i]>'Z')message[i]='Z'-'A'+1;//向前换行到字母表的开头
对于该代码,请确保仅将其应用于字母“A”到“Z”,否则标点符号加小写字母将被弄乱

我不知道如何包装它

选择正的代码已经换行。良好的开始

不仅应该将密钥添加到字母包装中,还可以防止添加溢出。因此,
密钥
可以具有任何
int
[int\u MIN…int\u MAX]
。让我们先驯服
密钥

考虑将键的范围减小到[0-25]

cin >> key;
key = key%26;           // Key now [-25...25]
if (key < 0) key += 26; // Key now [ 0 ...25]
....

您的代码仅处理正钥匙(如果ch>
保护,则为
保护)Martheen说,你的代码只将
键添加到
ch
中,然后检查结果和是否大于“Z”或“Z”。但是如果键为负数,则结果和有可能低于“a”或“a”,这与你的处理方式不同,如果您查看输出,则字母c、b和a不起作用,因为减法3不会环绕。您可以使用
if(ch>'Z')
语句检查环绕-为什么不检查
if(ch<'a')
// char ch;
int ch;