【发布时间】:2017-05-13 19:03:12
【问题描述】:
我正在为我的实验室做一项作业,该作业与将字符串从另一个文件加密为文本文件有关,它工作得很好,但我唯一的问题是,当我加密或解密时,加密省略了字母 Z 和 Y。我试过改变一些东西,但没有任何效果,请如果你知道如何解释,因为我迷路了。
这是我目前的代码:
#include iostream
==
#include fstream
==
#include cstring
==
#include string
==
using namespace std;
int main()
{
ifstream inputFile;
ofstream outputFile;
const int SIZE=150;
char file[SIZE];
char message[SIZE+1];
char letter;
char alphabet[]={'A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
cout<<"Enter the message you want to encrypt: "<<endl; //getmessage
cin.getline(message,SIZE,'\n');
for(int i=0;i<strlen(message);i++){
if(islower(message[i])) //change to
message[i]=toupper(message[i]); //uppercase
}
outputFile.open("textoNoEncrypt.txt");
for(int i=0;i<strlen(message);i++){ //copy message to
outputFile.put(message[i]); //file
}
outputFile.close();
inputFile.open("textoNoEncrypt.txt");
if (inputFile.is_open()){
int i=0;
while (!(inputFile=='\0')){
inputFile>>file[i]; //reading and copying
i++; //data from file
}
}
inputFile.close();
outputFile.open("textoEncrypt.txt");
for(int i=0;i<strlen(file);i++){
int j=0;
int P=0;
int index=0;
bool found=false;
while(!found){
if(file[i]==alphabet[j]){
P=j;
index=(P+3)%26; //encrypting message
file[i]=alphabet[index];
found=true;
cout<<j<<" ";
}
j++;
}
outputFile.put(file[i]);
}
outputFile.close();
cout<<message<<endl; //show original message
cout<<file<<endl; //show encrypted message
return 0;
}
【问题讨论】:
-
#include iostream无法编译。请改用#include <iostream>。 -
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
-
如果您的代码确实有效,那么您最好在SE Code Review 寻求改进。
-
... 否则,解决此类问题的正确工具就是您的调试器。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
我会先扔掉所有的文件 IO,然后把它减少为一个输入字符串、你的旋转算法和一个输出到控制台的字符串。如果这行得通,那么你就领先了。如果没有,您只需扔掉 吨 的 io 代码,这些代码会使问题变得混乱,并且可以专注于解决问题。
标签: c++ arrays string encryption