-2

我创建了一个程序,它采用一个“单词”和一个 num 参数作为移位数。例如,如果字符串是Caesar Cipher并且 num 是 2,则输出应该是Ecguct Ekrjgt。但我希望标点符号、空格和大小写保持不变。我也不能添加一个句子。一句话。我不允许使用字符串。

#include<iostream>
using namespace std;

int main()
{
  char name[50] = { '\0' };
  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;
}
4

1 回答 1

1

要忽略标点符号,我建议在您的内部for loop放置一个if以选择要保持不变的标点符号。例如:

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;
    }
}

为每个特殊的 puctuation 字符输入它很乏味,但是 c++ 有点像这样:P

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

char temp = name[i] + cipherKey;

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

于 2015-04-21T20:18:51.513 回答