所以我程序中的某些内容并没有按照我认为的方式进行。如果我能得到一些帮助,我将不胜感激。我将解释它应该如何首先工作,并从最重要的问题开始回答我的问题,因为我一直坚持下去,而且这不允许我继续前进。
因此,我编写了一个加密程序,要求用户输入一个字符串,然后对其进行加密,并创建一个名为“ secret.dat”的文件,并将加密后的短语放入其中。
如果用户输入以下短语:
hello world 123
它将发送到文件中:
11spwwzshzcwoh234&6#12
“ 11”表示字母向右移动了多少个字母。随后是他以加密形式输入的词组。“&”字符显示加密的结束位置。他的短语中的每个空格都使用前一个字母并将其移动4,最后在'&'字符之后,它告诉空格之间用数字#隔开的数字位置。
我正在编写的当前程序将解密“ secret.dat”文件,并在屏幕上显示其短语。
这是我到目前为止的内容:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
//Declare Variables
int shift;
ifstream inData;
string input;
string output;
int length;
//Open file
inData.open("secret.dat");
//Begin program
inData >> shift;
getline(inData, input, '&');
length = input.length();
for (int count = 0; count < length; count++)
{
if (input[count] >= 'a' && input[count] <= 'z')
{
output += ((input[count] - 'a' - shift) % 26) + 'a';
}
else if (input[count] >= '0' && input[count] <= '9')
{
output += ((input[count] - '0' - shift) % 10) + '0';
}
}
//Declare variables for location of spaces
int i = 0;
char ignore;
int spaces[20];
int location;
//Begin finding the spaces
while (!EOF)
{
inData >> location;
spaces[i] = location;
inData >> ignore;
}
//Preview each result to compare and make sure they are working right
cout << shift << endl;
cout << input << endl;
cout << output << endl;
cout << spaces[0] << endl;
cout << spaces[1] << endl;
return 0;
}
这就是我得到的结果
11
spwwzshzswoh234
helloh]oXld]'()
4704512
0
显然最后三行不能正常工作(注意:这不是我要显示的方式,我只是将它们打印到屏幕上,以便可以看到结果是什么,并确保它是正确的,这是不正确的。) t)。
因此,我的第一个也是最重要的问题是为什么我的while循环无法正常工作。当它应该在第一个位置放置6时,它在第一个数组插槽中给了我一堆随机数,然后它应该跳过下一个字符,然后在数组的第二个位置放置12并在其中放置0 。如果我只是在while循环之外从文件中调用一个整数,它给我6没问题,所以我不确定为什么会这样做。我认为它将第一个整数放在数组的第一个插槽中,然后跳过下一个字符,然后将下一个整数放在数组中,并跳过下一个字符,依此类推,直到文件结束。这部分是使我无法继续执行程序的原因,因此我将其视为最重要的部分。
其次,我将字符向后移动的公式有什么问题?我使用了相同的确切公式将字符向前移动到我的加密程序中,除了我添加了shift之外,因此我假设只需减去shift即可对其进行解密。
感谢任何愿意提供帮助的人!
在您的加密方案中,字符“ h”代表明文字母“ w”。
让我们研究一下您的代码如何尝试对此进行解码:
if (input[count] >= 'a' && input[count] <= 'z')
{
output += ((input[count] - 'a' - shift) % 26) + 'a';
}
input[count]
是字符“ h”。'h'-'a'为7。您的“ shift”值为11。
您的表达式计算出(7-11)%26或-4%26。
流行测验:-4%26是多少?得知答案是-4,您会感到惊讶。在'a'上加上-4会产生字符']',这是您在输出中相应位置看到的内容。
要解决此问题,请将此行更改为:
output += ((input[count] - 'a' - shift + 26) % 26) + 'a';
并以相同方式将另一行更改为数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句