0

我已经生成了一个随机文本文件

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”

4

3 回答 3

3

虽然其他人指出了 Map,但我会使用一个subs大小为 26 的简单数组 ( )(如果只有大写字母)。

用 0 初始化数组。阅读所有字符及其映射。像这样存储它subs[char-'A'] = mapped_char。我会把阅读留给你。

编辑-
如果您准备为额外的内存使用付费,只需将大小subs设为123(ASCII 表示z+ 1)。

这也将简化逻辑subs[char] = mapped_char

于 2012-07-18T05:16:28.593 回答
2

由于这感觉像是家庭作业,我会给你指导而不是解决方案。

您想在输入字符和要输出的相应字符之间创建一个双射映射。

一种可靠的方法是使用Map。创建一个以输入字符(例如“A”)为键、以输出字符(例如“T”)为值的映射。

对于从文件中读入的每个字符,使用 Map 来查找相应的输出字符。

您将需要一次读取一个字符(最简单),或一次读取一行(就像您现在所做的那样)并逐个字符地遍历每一行,以使用 Map 进行翻译。

更新

为了澄清评论中的一点,这是一个双射函数,因为每个原始字符都有一个编码字符。如果不需要对文本进行解码,则 Map 将用于功能的软件表示。如果需要解码,Bimap 更合适。

内射函数

内射函数

双射函数

双射函数

http://en.wikipedia.org/wiki/Injective_function

于 2012-07-18T04:57:25.473 回答
0

一种方法是如果你

看看std::map<>map<char,char>在你的情况下)

使用它,您可以设置字符对映射,然后当您从文件/缓冲区中读取一个字符时,您在映射中查找它并检索相应的字符。

另一种更详细的方法是使用 switch 语句

char ch; 
ch << openfile
switch(ch)
{
   case 'A': ch = 'T'; break;
...
}
cout << ch;

还有其他方法,看看你是否能找到更多涉及数组的方法。

于 2012-07-18T05:09:37.783 回答