我正在为一项作业编写此程序。该代码是根据文本中字母的出现频率来解密密文。当我尝试将密文字母更改为其明文字母时,问题就出现了。由于某种原因,密文字母被更改为随机字母。
我试图找出问题所在,因此我将 print 语句添加到执行交换的代码中。我注意到,对于每个字母,代码在进行最后一次分配之前都会交换两次。这是代码片段:
//decryption
for (j = 0, k = strlen(cipher); j < k; j++) {
for (c = 0 ; c < 26; c++){
if (cipher[j] == freqCounts[c].letter){//checks if the ciphertext letters match
//use the following line of code to see how the swap is being handled
/*
printf("f[%d] = %c and c[%d] = %c\n", c, freqCounts[c].pletter, j, cipher[j]);
*/
cipher[j] = freqCounts[c].pletter;//swaps with plaintext letter here
}
}
}
您能否提供一些关于为什么要对每个字母进行额外交换的见解。
最佳答案
假设 freqCounts[0].letter=='a'
, freqCountes[0].pletter=='b'
, freqCountes[1] .letter=='b'
.
在这种情况下,cipher[j] == freqCounts[c].letter
在 c=0
处变为 true,并且在 c 处再次变为 true =1
.
我认为在 cipher[j] = freqCounts[c].pletter;
之后添加 break;
可能会起作用。
关于C编程数组赋值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550044/