【问题标题】:Decrypting a Caesar's Cypher Trouble解密凯撒的密码麻烦
【发布时间】:2012-01-20 06:38:24
【问题描述】:

我已经为此困扰了很长时间,我想知道是否有人可以帮助我。我如何编写一个程序来计算 C++ 中加密的 Caesar's Cypher 文件的移位值?我的任务是取每个小写字母并计算每个字母的使用次数,然后找到最常用的字符。我知道我可以用 char 和 int 的映射来做到这一点。但后来我不得不回到那个字母,把它改成字母“e”。使用地图,无法通过值进行搜索。我认为唯一的方法是向量向量,但我也不知道如何再次找到字母。有谁知道更好的方法或者我如何使用向量来实现这一点?

【问题讨论】:

  • 为了获得帮助,您还应该展示您的尝试。
  • 我只是在寻求提示,因为我的意思是我一开始不知道任何有效的方法来开始

标签: encryption


【解决方案1】:

你可以这样走。

  1. 首先读取缓冲区中的整个文件。
  2. 使用char 键和int 值创建映射。所有字母和值 0
  3. 循环遍历整个缓冲区,直到每个字符在 map 中的值递增 1。还要维护max变量存储具有最大值的字符的键ha。

  4. 在循环结束时,max 变量将指向 e。

  5. max 中减去 4 将为您提供此密码的移位值。如果它是负数,那么您可以添加 26。(如 mod 26 中的此计算)

【讨论】:

  • 非常感谢!我能够利用向量来发挥我的优势。地图的想法也很好。使用 max 我能够计算移位值的距离()。
  • @BryanSmith:如果您认为这个答案(或来自 Sani 的答案)足以解决您的问题,您应该将其标记为已接受(使用复选标记按钮)。
【解决方案2】:

您只需要一个大小为 26 的向量(每个字符一个),其中 A 的索引为 0,Z 的索引为 25。

遍历密文并在向量中增加指定字符索引的值。

当您浏览完所有密文后,请浏览向量并检查最高值。这可能是字符 E。

现在你取索引并减去 4(E 的索引)。

这会产生移位值。

假设 20 的计数最高,那么您的移位值为 16。

【讨论】:

  • 哦,我明白了!因此,您无需保存字母,而是保留其 0-25 的位置。非常感谢!
  • 当然,如果明文是关于凤梨植物的,这可能会出错:-)
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多