凯撒密码的难度
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
如何以数字形式表示)
我创建了一个程序,它接受一个 '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
如何以数字形式表示)