凯撒密码的难度

Difficulty with caesar cipher

我创建了一个程序,它接受一个 'word' 和一个 num 参数作为移位数。例如,如果字符串为 Caesar Cipher 且 num 为 2,则输出应为 Ecguct Ekrjgt。但我希望标点符号、空格和大写保持不变。我也不能加一句话。就一句话。我不允许使用字符串。

#include<iostream>
using namespace std;

int main()
{
  char name[50] = { '[=10=]' };
  int cipherKey, len;

  cout << "Enter cipher key: ";
  cin >> cipherKey;

  cout << "Enter a message to encrypt: ";
  cin >> name;

  len = strlen(name); // this code just inputs the length of a word. after spaces it won't calculate.

  for (int i = 0; i < len; i++)
  {
    char temp = name[i] + cipherKey;
    cout << temp;
  }
  cout << "\n\n";

  return 0;
}

要忽略标点符号,我建议您在 for loop 中将 if 到 select 您想要的标点符号保持不变。例如:

for (int i = 0; i < len; i++)
{
    if( name[i]==' ' || name[i]==',' || name[i]=='.' /*...etc...*/ )
        cout << name[i];
    else {
        char temp = name[i] + cipherKey;
        cout << temp;
    }
}

为每个特殊的标点符号输入它是一件乏味的事情,但 C++ 有点像这样:P

要使密码正常工作:如评论中所述,行

char temp = name[i] + cipherKey;

不会总是如你所愿。具体来说,如果 name[i]+cipherkey 不在字母表的末尾,您将希望环绕。我会把它留给你弄清楚。 (提示:google 'ASCII values' 查看 char 如何以数字形式表示)