解密单字母密码到新的文本文件
Decrypt monoalphabetic cipher to new text file
我正在尝试解密单一字母级密码。我在很大的文本文件中阅读。我已经有了:a = o,b = m,c = v,d = h,e = j,f = r,g = t,h = l,i = y,j = a,k = c,l = k,m = k,m =x,n = e,o = w,p = u,q = b,r = g,s = s,t = q,u = f,v = n,w = z,w = z,x,x = i,y = p,z = d。
我不确定如何替换字母并将其输出到新的文本文件中。目前,文本文件只是在控制台上打印而没有完成任何操作。
我已经按字符读过文本文件。
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{
ifstream input("cipher.txt");
char data;
while(!input.eof()){
input.get(data);
cout<<data;
}
cout<<endl;
input.close();
}
我必须承认,首先,我没有仔细阅读操作问题。
编码从A
到Z
的范围,std::map<>
(如P.Ws答案中的建议)能够做到这一点,但在我看来,在我看来有点过分设计。阵列也可以做这项工作,而且肯定会更快。(访问为o(1),而不是o(ld(n))。)
所以,编码看起来像这样:
char encode(char c)
{
static const char cMap[] = {
/* A= */ 'O',
/* B= */ 'M',
/* C= */ 'V',
/* D= */ 'H',
/* E= */ 'J',
/* F= */ 'R',
/* G= */ 'T',
/* H= */ 'L',
/* I= */ 'Y',
/* J= */ 'A',
/* K= */ 'C',
/* L= */ 'K',
/* M= */ 'X',
/* N= */ 'E',
/* O= */ 'W',
/* P= */ 'U',
/* Q= */ 'B',
/* R= */ 'G',
/* S= */ 'S',
/* T= */ 'Q',
/* U= */ 'F',
/* V= */ 'N',
/* W= */ 'Z',
/* X= */ 'I',
/* Y= */ 'P',
/* Z= */ 'D'
};
return c >= 'A' && c <= 'Z'
? cMap[c - 'A'] // range ['A', 'Z'] to range [0, 25]
: '?';
}
阅读两次,我意识到解密&ndash;糟糕。
但是,它确实在相反的方向上工作:
char decode(char c)
{
static const char cMap[] = {
/* A= */ 'J',
/* B= */ 'Q',
/* C= */ 'K',
/* D= */ 'Z',
/* E= */ 'N',
/* F= */ 'U',
/* G= */ 'R',
/* H= */ 'D',
/* I= */ 'X',
/* J= */ 'E',
/* K= */ 'L',
/* L= */ 'H',
/* M= */ 'B',
/* N= */ 'V',
/* O= */ 'A',
/* P= */ 'Y',
/* Q= */ 'T',
/* R= */ 'F',
/* S= */ 'S',
/* T= */ 'G',
/* U= */ 'P',
/* V= */ 'C',
/* W= */ 'O',
/* X= */ 'M',
/* Y= */ 'I',
/* Z= */ 'W'
};
return c >= 'A' && c <= 'Z'
? cMap[c - 'A'] // range ['A', 'Z'] to range [0, 25]
: '?';
}
阵列值的重新排序有点乏味&ndash;我本可以使用sort
。
- 定义一个
std::map<char, char>
,您可以在其中存储字母及其键 - 在写模式中打开一个新文件" deciphered.txt"
- 当您从文件中读取每个
char
时,从地图中找到其值,然后写入新文件。
还请阅读Why-is-wher-feof-file-eSlway-wrong,以获取从文件读取数据的正确方法。
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入