由于我是编码c ++的新手并且正在学习面向对象的课程,我需要一些帮助。对于这段代码,我想通过移动由1 ascii数字输入的所有文本来加密它,即a - > b,b->我想使用所有ascii值32 - 126但我无法弄清楚为什么当我尝试加密任何东西时我只得到一个“^”作为输出。
#include <iostream>
#include <string>
using namespace std;
void encrypt (string &encrypt)
{
string encryption;
for (int i = 0; i < encrypt.length(); i++)
{
encrypt[i]++;
if (i > 126){
encrypt = i - 94;
}
else if (i < 32){
encrypt = i + 94;
}
}
}
void decrypt (string decrypt)
{
string decryption;
for ( int i = 0; i < decryption.length(); i ++)
{
decryption[i]--;
if (i > 126){
decrypt = i + 94;
}
else if (i < 32){
decrypt = i - 94;
}
}
}
int main ()
{
string option;
string encryption1;
string decryption1;
cout << "Do you want to encrypt or decrypt? \n";
cin >> option;
if (option == "encrypt")
{
cout << "What do you want to encrypt \n";
cin.ignore();
cin.clear();
getline (cin, encryption1);
encrypt ( encryption1);
cout << encryption1 << " " << endl;
}
if (option == "decrypt")
{
cout << "What do you want to decrypt \n";
cin.ignore();
cin.clear();
getline (cin, decryption1);
encrypt ( decryption1);
cout << decryption1 << " " << endl;
}
return 0;**
答案 0 :(得分:0)
去年我在一级编程课上做了类似的事情。我们创建了一个基于Cesar密码体系结构的Vigenere密码。 有用的是首先创建一个0基,即如果你正在使用值a到b,从你先编码的每个字符中减去a,做数学,仔细检查该值是否在值(32到126 == 0到94)然后返回char + a。这意味着重写您的逻辑和函数以立即获取char而不是整个字符串。 至于为什么你得到&#39; ^&#39;作为您唯一的输出,&#39; ^&#39;的ACSII代码是94和你的代码:
for ( int i = 0; i < decryption.length(); i ++)
{
decryption[i]--;
if (i > 126){
decrypt = i + 94;
}
else if (i < 32){
decrypt = i - 94;
}
}
}
将整个字符串设置为char 94.设置i = 0然后说如果i小于32则字符串decrypt等于char 0 + 94,它等于94,等于&#39 ; ^&#39;