我已生成随机文本文件
A B C D E F G H
T W G X Z R L N
我想对我的信息进行编码,以便A = T,B = W,C = G等等。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int
main ()
{
string getmsg;
ifstream openfile ("random.txt");
if (openfile.is_open ()) {
while (! openfile.eof ()) {
getline (openfile,getmsg); //read from random.txt
cout << getmsg << endl;
}
}
}
我被困在这里。
例如。当我输入单词“HAD”时,它将显示“NTX”,并使用相同的随机文本文件,我可以输入“NTX”并给我回“HAD”
答案 0 :(得分:3)
虽然其他人指出了Map,但我会使用一个大小为26的简单数组(subs
)(如果只有大写字母)。
使用0s初始化数组。阅读所有字符及其映射。存储类似subs[char-'A'] = mapped_char
的内容。我会把阅读留给你。
修改强> -
如果您准备为额外的内存使用付费,只需将subs
的大小设为 123 (z
的ASCII + 1)。
这也将简化subs[char] = mapped_char
答案 1 :(得分:2)
因为这感觉就像家庭作业,我会给你指导而不是解决方案。
您想在输入字符和要输出的相应字符之间创建bijectional映射。
一个可行的方法是使用Map。创建一个以输入字符为关键字的地图,例如'A'及其值作为输出字符,例如'T'。
对于从文件中读入的每个字符,请使用Map查找相应的输出字符。
您需要一次读取一个输入的字符(最简单),或者一次读取一行(就像您现在一样)并逐个字符地遍历每一行,以使用Map进行翻译。 / p>
<强>更新强>
为了澄清注释中的一点,这是一个双射函数,因为每个原始字符只有一个编码字符。如果不必对文本进行解码,则Map将对该函数的软件表示进行处理。如果需要解码,Bimap更合适。
内射函数
双射函数
答案 2 :(得分:0)
这样做的一种方法是
查看std::map<>
(在您的情况下为map<char,char>
)
使用它你可以设置一个字符对的映射,然后当你从文件/缓冲区中读取一个字符时,你可以在地图中查找它并检索相应的字符。
另一种更冗长的方式是使用switch语句
char ch;
ch << openfile
switch(ch)
{
case 'A': ch = 'T'; break;
...
}
cout << ch;
还有其他方法,看看你是否能找到一个涉及阵列的方法。