寻求凯撒密码的解释

在尝试(但失败)为奥丁项目练习编写凯撒密码作业后,我最终屈服并查找答案。不过,我不太明白。


我正在寻求对每一行的作用及其工作原理的解释。我复制的代码对每一行的作用有一些简短的描述,但我仍然不明白它是如何工作的。


const caesar = function (str, amount) {

        // Wrap the amount

        if (amount < 0) {

          return caesar(str, amount + 26);

        }

      

        // Make an output variable

        var output = "";

      

        // Go through each character

        for (var i = 0; i < str.length; i++) {

          // Get the character we'll be appending

          var c = str[i];

      

          // If it's a letter...

          if (c.match(/[a-z]/i)) {

            // Get its code

            var code = str.charCodeAt(i);

      

            // Uppercase letters

            if (code >= 65 && code <= 90) {

              c = String.fromCharCode(((code - 65 + amount) % 26) + 65);

            }

      

            // Lowercase letters

            else if (code >= 97 && code <= 122) {

              c = String.fromCharCode(((code - 97 + amount) % 26) + 97);

            }

          }

      

          // Append

          output += c;

        }

      

        // All done!

        return output;

      };


慕侠2389804
浏览 83回答 1
1回答

泛舟湖上清波郎朗

第一个 if 语句:if&nbsp;(amount&nbsp;<&nbsp;0)&nbsp;{ &nbsp;&nbsp;return&nbsp;caesar(str,&nbsp;amount&nbsp;+&nbsp;26) }通过调用自身来确保移位量为 0 及以上,直到达到 0 为止。然后下面的行循环遍历整个字符串中的所有字符。for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;str.length;&nbsp;i++)&nbsp;{对于每个字符,它使用一种称为正则表达式的东西检查它是否是一个字母(谷歌了解更多信息)if&nbsp;(c.match(/[a-z]/i))&nbsp;{线路var&nbsp;code&nbsp;=&nbsp;str.charCodeAt(i);获取表示字符串中位置“i”处的字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字与之关联。这就是下面两个 if 语句的用途。我将解释小写字母的情况,您应该也能看到大写字母的工作原理。c&nbsp;=&nbsp;String.fromCharCode(((code&nbsp;-&nbsp;65&nbsp;+&nbsp;amount)&nbsp;%&nbsp;26)&nbsp;+&nbsp;65);首先从数字中减去 65。这是因为第一个小写字母“a”的值为 65。之后它将结果移动“amount”。% 符号可能看起来很奇怪。但它所做的只是将两侧相除并返回“其余部分”,即剩余数。例如如果我们写:5&nbsp;%&nbsp;2它等于 1。这样做是为了“循环”数字并将其保持在 0 到 26 之间。之后,它加回 65 并将数字转回字符。最后一行:output&nbsp;+=&nbsp;c;将字符添加到结果字符串中。希望这对您有所帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript