【发布时间】:2015-01-23 19:54:08
【问题描述】:
我正在开发一个简单的替换密码解码器。我正在使用频率分析来解密密文。仅查看唯一字母的频率是不够的。我需要查看 2 字母序列(可能是 3 字母序列)的出现情况。
我计算每个字母出现次数的代码如下
int counterRaw[256][2] = {0};
for(int i = 0; i <inputString.length(); i++)
counterRaw[inputString[i]][1]++;
int counterLetter[26][2] = {0};
for(int i = 0 ; i<26 ; i++){
counterLetter[i][0] = 'A'+i;
counterLetter[i][1] = counterRaw['A'+i][1];
如您所见,非常简单而有效!
但我不知道如何实现 2 字母序列计数器,您有什么想法可以帮助我编写代码吗?
谢谢!
编辑:例如 鉴于 AZAZ RTYU JKLM 我希望我的程序输出:
AZ : 2
ZA : 1
ZR : 1
RT : 1
...
【问题讨论】:
-
所以给定
1a2bc3de4,计数将是2,因为两个字母序列有bc和de? -
可能是最简单的解决方案:使用 std::map。
-
如果你只需要2个字母,一个int出现的数组[26][26];就足够了。
-
我很想在遍历字符串的字符时散列/检查键值。
标签: c++ encryption counter frequency-analysis