上节中我们提到,用《数语加密程序》对字符串进行加密,本节将分享解密的程序。
废话不说,直接上代码。
#include<bits/stdc++.h>
using namespace std;
void color1() {
system("color a");
}
void color2() {
system("color e");
}
void fileWrite1(string &str) {
FILE*fp=fopen("数语解密.docx","w");
if(fp==NULL) {
perror("File open failed:");
return;
}//判断是否运行成功
//写文件
for(int i=0; i<str.size(); i++) {
fputc(str[i],fp);
//printf("%c",ch);
}
cout<<"翻译的内容已被记录,请继续输入"<<endl;
puts("");
fclose(fp);
}
void fileWrite2(string &str) {
FILE*fp=fopen("数语原文.docx","w");
if(fp==NULL) {
perror("File open failed:");
return;
}//判断是否运行成功
//写文件
for(int i=0; i<str.size(); i++) {
fputc(str[i],fp);
//printf("%c",ch);
}
cout<<"原文内容已存储!"<<endl;
puts("");
fclose(fp);
}
string s1,str;
string find_replace(string &str,string substr,string rp) {
int len1=str.size();//父串长度
int len2=substr.size();//字串长度
int i,j,num=0;//mun统计字串出现次数
for(i=0; i<len1; i++) { //遍历父串
int flag=1;//定义标志flag
for(j=0; j<len2; j++) { //遍历字串
if(str[i+j]!=substr[j]) { //父串中第i+j个字符与字串中第j个字符不重复
flag=0;//flag改变
}
}
if(flag==1) { //退出字串循环,判断从父串中第i个字符开始是否有子串与查找的字串重复
//num++;//统计次数
str=str.replace(i,len2,rp);//对父串中第i个字符开始的len2长度字符用“a”替换
i+=len2-1;//查找成功,将查找的初始位置向后移动字串长度单位
}
}
return str;
}
void Title() {
puts("====================数语解密器====================");
puts("欢迎使用《数语解密器》!!!");
puts("作者:Go Far for Dream(持梦远方)");
}
int main() {
Title();
string s3,s4,since,print;
while(1) {
puts("程序启动成功!!!");
color1();
puts("\n请输入数语:\n(注:多余空格及标点符号会自动被过滤!)");
getline(cin,s1);
since+=s1;
fileWrite2(since);
for(int i=0; i<s1.size(); i++)if(s1[i]=='0'||('7'<=s1[i]&&s1[i]<='9')||(33<=s1[i]&&s1[i]<=47)||(58<=s1[i]&&s1[i]<=64)||(91<=s1[i]&&s1[i]<=96)||(123<=s1[i]&&s1[i]<=126))s1[i]=' ';
for(int i=0; i<s1.size(); i++) {//过滤多余空格
if(s1[i]!=' ')//若当前字符不是空格
s3+=s1[i];
else if(s1[i+1]!=' ')//若当前字符为空格,后面一个字符不是空格时
s3+=s1[i];
}
s1=s3;
for(int i=0; i<s1.size(); i+=2) {
string s;
if(s1[i]==' ') {
s4+=' ';
s=s1.substr(i+1,2);
i++;
find_replace(s,"11","g");
find_replace(s,"12","f");
find_replace(s,"13","d");
find_replace(s,"14","s");
find_replace(s,"15","a");
find_replace(s,"21","h");
find_replace(s,"22","j");
find_replace(s,"23","k");
find_replace(s,"24","l");
find_replace(s,"25","m");
find_replace(s,"31","t");
find_replace(s,"32","r");
find_replace(s,"33","e");
find_replace(s,"34","w");
find_replace(s,"35","q");
find_replace(s,"41","y");
find_replace(s,"42","u");
find_replace(s,"43","i");
find_replace(s,"44","o");
find_replace(s,"45","p");
find_replace(s,"51","n");
find_replace(s,"52","b");
find_replace(s,"53","v");
find_replace(s,"54","c");
find_replace(s,"55","x");
find_replace(s,"56","z");
s4+=s;
} else {
s=s1.substr(i,2);
find_replace(s,"11","g");
find_replace(s,"12","f");
find_replace(s,"13","d");
find_replace(s,"14","s");
find_replace(s,"15","a");
find_replace(s,"21","h");
find_replace(s,"22","j");
find_replace(s,"23","k");
find_replace(s,"24","l");
find_replace(s,"25","m");
find_replace(s,"31","t");
find_replace(s,"32","r");
find_replace(s,"33","e");
find_replace(s,"34","w");
find_replace(s,"35","q");
find_replace(s,"41","y");
find_replace(s,"42","u");
find_replace(s,"43","i");
find_replace(s,"44","o");
find_replace(s,"45","p");
find_replace(s,"51","n");
find_replace(s,"52","b");
find_replace(s,"53","v");
find_replace(s,"54","c");
find_replace(s,"55","x");
find_replace(s,"56","z");
s4+=s;
}
s="";
}
puts("翻译内容:");
color2();
cout<<s4<<endl;
print+=s4;
fileWrite1(print);
//s1="";
s3="";
s4="";
}
return 0;
}
运行演示:
其实这个程序就是将之前的那程序逆向编写。原理及其简单。
感谢您的使用,我们下篇再见!