凯撒密码的巧妙之处:如何从字符串中删除随机字母

问题描述 投票:0回答:1

我正在用 JavaScript 开发凯撒密码的变体。不同之处在于,每 2 个空格生成一个随机字母并插入其中。我的加密工作得很好。我的解密大部分工作正常。我的程序解密了它,但我不知道如何删除随机字母。我正在编写一个函数来删除字母,我当前的代码如下:

let decryptedMessage = seoekx tbhea mtidrniughkt

function finalMessage (decryptedMessage) {
    let finalMessage = "";
    for (let i = 1; i < decryptedMessage.length - 1; i++) {
        if (i % 2 === 0) {
            finalMessage += decryptedMessage.replace(decryptedMessage[i],"");
        }
        else {
            finalMessage += decryptedMessage[i];
        }
    }
    return finalMessage;
}

const finalMessageResult = finalMessage(decryptedMessageResult);
console.log(`The final decrypted message is ${finalMessageResult}`);

这是我的输出:

eseekx tbhea mtidrniughkteseoex tbhea mtidrniughktxseoekxtbhea mtidrniughkttseoekx thea mtidrniughkthsoekx tbhea mtidrniughktaseoekxtbhea mtidrniughktmseoekx bhea mtidrniughktiseoekx tbhea mtirniughktrseoekx tbhea mtidriughktiseoekx tbhea mtidrnighktgseoekx tbea mtidrniughktk

我想我需要将finalMessage从for循环中取出,但我不知道该怎么做,因为我觉得if语句需要在for循环中才能循环遍历消息。

如有任何帮助,我们将不胜感激。

我觉得我需要将它放在带有 if else 语句的 for 循环中。我头脑中的逻辑是使用 i % 2 === 0,然后用“”替换该元素。但显然我脑子里的想法和正在执行的事情并不相同。我希望代码从字符串中删除随机字母,创建一条可读的消息。

javascript string replace caesar-cipher
1个回答
0
投票

看起来你的迭代器数学有点偏差,而且看起来你对算法考虑得太多了!试试这个:

let decryptedMessage = "seoekx tbhea mtidrniughkt";

function finalMessage (decryptedMessage) {
    let finalMessage = "";
    
    for (let i = 0; i < decryptedMessage.length; i++) {
        if ((i + 1) % 3 !== 0) {
            finalMessage += decryptedMessage[i];
        }
    }
    return finalMessage;
}

const finalMessageResult = finalMessage(decryptedMessage);
console.log(`The final decrypted message is ${finalMessageResult}`);

我改变了一些事情:

  • 从 0 开始迭代器,因为字符串的第一个索引是 0
  • 你想要 mod 3,因为你要删除每第三个字母
  • 你的算法有点不必要的复杂!这只是将除第三个字母之外的每个字母添加到输出字符串中
  • 为了补偿从 0 开始的 i,我只需检查
    i + 1

输出:

The final decrypted message is seek the midnight

© www.soinside.com 2019 - 2024. All rights reserved.