【发布时间】:2021-10-08 22:13:04
【问题描述】:
构建一个简单的程序,将字符串中字符的 ASCII 值乘以 3 进行加密,然后除以 3 进行解密。到目前为止,我已经完成了加密部分,但是每当我输入加密给出的内容并尝试解密时,它都不起作用。我认为这与缓冲流有关,但如果有人能提供帮助,我可能是错的。
#include<iostream>
using namespace std;
int main()
{
string message;
int charValue;
int counter;
int encrypt;
char choice;
char quit = 'N';
while (quit == 'N')
{
cout << "Enter E to encrypt or D to Decrypt\n";
cin >> choice;
toupper(choice);
cout << "Enter text no spaces: ";
cin >> message;
int messagelen = message.length();
string stringArray[255];
if (choice == 'E')
{
for (counter = 0; counter < messagelen; counter++) //*3 to ascii val
{
stringArray[counter] = message[counter] * 3;
}
for (counter = 0; counter < messagelen; counter++)
{
cout << stringArray[counter];
}
}
else
{
for (counter = 0; counter < messagelen; counter++) // divide 3 to ascii val
{
stringArray[counter] = message[counter] / 3;
}
for (counter = 0; counter < messagelen; counter++)
{
cout << stringArray[counter];
}
}
cout << "\nY to go again N to quit";
cin >> quit;
}
return 0;
}
【问题讨论】:
-
string stringArray[255];这将创建一个包含 255 个字符串的数组。这没有任何意义,因为您在输入时只接受一个字符串。您更可能需要的是ints 数组(short或unsigned short也足够大)。将message[counter] * 3存储在该数组的每个适当索引处,然后您可以除以 3 并强制转换为char以检索 ASCII 值。 -
鉴于在编译时字符串的长度是未知的,使用
std::vector<unsigned short>可能更有意义。 -
另外值得注意的是,您的 while 循环在
quit == 'N'时运行,但您提示用户输入'N'以退出。
标签: c++ encryption