实现对26个英文字母的编码和译码,设计完成以下功能:1.能够对27个字符进行编码、并存储。
2.利用编码能够实现任意英文句子的编码操作,并存储编码。3.能够将二进制的密码翻译成句子,并将译文存储。
4.能随时查看字母的编码。
5.有能力的同学尽可能使用文件去存储相关内容。
实现对26个英文字母的编码和译码,设计完成以下功能:1.能够对27个字符进行编码、并存储。
2.利用编码能够实现任意英文句子的编码操作,并存储编码。3.能够将二进制的密码翻译成句子,并将译文存储。
4.能随时查看字母的编码。
5.有能力的同学尽可能使用文件去存储相关内容。
可以给26个字母对应一个密码表,用这个密码表来编码和解码。
运行结果及代码如下:




代码:
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
//定义编码表
const char g_code[] = { 'U','>','<','[',']','x','K','c',
'q','=','/','d','y','a','V','b',
'W','T','h','j','|','{','}','^',
'P','R' };
//对英文句子加密,buf是需要编码的字符串,dst是编码后的字符串
void encode(char buf[], char dst[])
{
int i = 0;
int index;
while (buf[i] != '\0')
{
index = buf[i] - 'a';
if (index >= 0 && index <= 25)
dst[i] = g_code[index];
else
dst[i] = buf[i];
i++;
}
dst[i] = 0;//结尾
}
//翻译句子,buf是需要解码的字符串,dst是阶码后的字符串
void decode(char buf[], char dst[])
{
int i = 0, j;
int index = -1;
while (buf[i] != '\0')
{
for (j = 0; j < 26; j++)
{
if (buf[i] == g_code[j])
break;
}
if (j < 26)
dst[i] = 'a' + j;
else
dst[i] = buf[i];
i++;
}
dst[i] = 0; //结尾
}
//写文件
void write2file(char buf[],const char* filename)
{
ofstream os;
os.open(filename, ios::binary);
os.write(buf, strlen(buf));
os.close();
}
//读文件
void readFile(char buf[], const char* filename)
{
ifstream is;
is.open(filename, ios::binary);
if (is.is_open())
{
is.read(buf, 1000);
is.close();
}
else
buf[0] = 0; //字符串结尾
}
int main()
{
int op,i;
char filename[100] = { 0 };
char buf[1000] = { 0 };
char dst[1000] = { 0 };
char zm[27]={0};
//26个英文字母
for (i = 0; i < 26; i++)
zm[i] = 'a' + i;
while (1)
{
system("cls"); //清屏
cout << "1.对26个英文字母编码并存储" << endl;
cout << "2.对任意英文句子进行编码并存储" << endl;
cout << "3.将二进制的密码翻译成句子,并将译文存储" << endl;
cout << "4.查看字母的编码" << endl;
cout << "0.退出" << endl;
cout << "请选择:";
cin >> op;
cin.get(); //吸收回车符
switch (op)
{
case 0:return 0;
case 1:
cout << "请输入存储文件名称:";
cin >> filename;
encode(zm, buf);
write2file(buf, filename);
cout << "已将26个英文字母的编码存储到" << filename << "文件(二进制文件)" << endl;
break;
case 2:
cout << "请输入一条英文句子:" << endl;
cin.getline(buf, 1000); //读取一行
encode(buf, dst);//编码
cout <<"编码后的:" << dst << endl;
cout << "请输入编码保存的文件名:";
cin >> filename;
write2file(dst, filename);
cout <<"已将句子的编码存储到" << filename << "文件(二进制文件)" << endl;
break;
case 3:
cout << "请输入需要译码的文件名(从文件中读取密码):";
cin >> filename;
readFile(buf, filename);
decode(buf, dst); //译码
cout << "译码后的:" << dst << endl;
cout << "请输入需要保存译码的文件名:";
cin >> filename;
write2file(dst, filename); //将译码存储到文件
break;
case 4:
cout << "26个字母对应的编码表为:" << endl;
for (i = 0; i < 26; i++)
{
cout << (char)zm[i] << " ";
}
cout << endl;
for (i = 0; i < 26; i++)
{
cout << (char)g_code[i] << " ";
}
cout << endl;
break;
}
system("pause");
}
}