我正在尝试用 C++ 编写一个凯撒密码程序。我使用了四个函数,一个用于选择 shift key ,两个用于加密和解密,最后一个用于实现凯撒密码,使用输入文件读取文本并将加密或解密的文本输出到输出文件中。我正在尝试运行代码,但它正在崩溃。我认为问题出在凯撒函数内部。但我不知道究竟是什么。有任何想法吗?这是我的代码:
#include <iostream>
#include <fstream>
using namespace std;
int chooseKey()
{
int key_number;
cout << "Give a number from 1-26: ";
cin >> key_number;
while(key_number<1 || key_number>26)
{
cout << "Your number have to be from 1-26.Retry: ";
cin >> key_number;
}
return key_number;
}
void encryption(char *w, char *e, int key){
char *ptemp = w;
while(*ptemp){
if(isalpha(*ptemp)){
if(*ptemp>='a'&&*ptemp<='z')
{
*ptemp-='a';
*ptemp+=key;
*ptemp%=26;
*ptemp+='A';
}
}
ptemp++;
}
w=e;
}
void decryption (char *e, char *w, int key){
char *ptemp = e;
while(*ptemp){
if(isalpha(*ptemp))
{
if(*ptemp>='A'&&*ptemp<='Z')
{
*ptemp-='A';
*ptemp+=26-key;
*ptemp%=26;
*ptemp+='a';
}
}
ptemp++;
}
e=w;
}
void Caesar (char *inputFile, char *outputFile, int key, int mode)
{
ifstream input;
ofstream output;
char buf, buf1;
input.open(inputFile);
output.open(outputFile);
buf=input.get();
while(!input.eof())
{
if(mode == 1){
encryption(&buf, &buf1, key);
}else{
decryption(&buf1, &buf, key);
}
output << buf;
buf=input.get();
}
input.close();
output.close();
}
int main(){
int key, mode;
key = chooseKey();
cout << "1 or 0: ";
cin >> mode;
Caesar("test.txt","coded.txt",key,mode);
system("pause");
}
这是我的程序的一些细节。我的代码模板在我的帖子之上。
参数w 是开头的文本,par e是解密后的文本。如果我们在 w* 文本中添加 shift 键并得到 *e,则正在进行加密。反向过程使解密功能,我有加密的文本(* e),我想获取解密的文本(* w),子跟踪我从chooseKey函数获取的密钥移位。在 Caesar 函数中,我使用包含一些数据的输入文件,我想在输出文件中提取加密或解密的文本。我已经实现了加密和解密函数,我的问题是如何在 Caesar 函数中使用它们。我没有得到任何理想的结果,我的程序正在崩溃。请提及我的错误。任何解决方案?