为了账号安全,请及时绑定邮箱和手机立即绑定

寻求凯撒密码的解释

寻求凯撒密码的解释

慕侠2389804 2023-10-14 09:54:01
在尝试(但失败)为奥丁项目练习编写凯撒密码作业后,我最终屈服并查找答案。不过,我不太明白。我正在寻求对每一行的作用及其工作原理的解释。我复制的代码对每一行的作用有一些简短的描述,但我仍然不明白它是如何工作的。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;      };
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

第一个 if 语句:

if (amount < 0) {
  return caesar(str, amount + 26)
}

通过调用自身来确保移位量为 0 及以上,直到达到 0 为止。然后下面的行循环遍历整个字符串中的所有字符。

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

对于每个字符,它使用一种称为正则表达式的东西检查它是否是一个字母(谷歌了解更多信息)

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

线路

var code = str.charCodeAt(i);

获取表示字符串中位置“i”处的字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字与之关联。这就是下面两个 if 语句的用途。我将解释小写字母的情况,您应该也能看到大写字母的工作原理。

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

首先从数字中减去 65。这是因为第一个小写字母“a”的值为 65。之后它将结果移动“amount”。% 符号可能看起来很奇怪。但它所做的只是将两侧相除并返回“其余部分”,即剩余数。例如如果我们写:

5 % 2

它等于 1。这样做是为了“循环”数字并将其保持在 0 到 26 之间。之后,它加回 65 并将数字转回字符。最后一行:

output += c;

将字符添加到结果字符串中。希望这对您有所帮助!


查看完整回答
反对 回复 2023-10-14
  • 1 回答
  • 0 关注
  • 52 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信