首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >凯撒密码的解说

凯撒密码的解说
EN

Stack Overflow用户
提问于 2020-12-04 18:48:43
回答 1查看 283关注 0票数 0

在尝试(失败)为Odin项目编写凯撒密码任务之后,我终于屈服了,并找到了答案。不过,我不太明白。

我正在寻求一个解释每一行做和为什么它的工作。我复制的代码对每一行做了一些简短的描述,但我仍然不明白它是如何工作的。

代码语言:javascript
复制
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;
      };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 20:05:59

第一个if-声明:

代码语言:javascript
复制
if (amount < 0) {
  return caesar(str, amount + 26)
}

确保移动量为0或更高,为此调用它自己,直到它是。然后,下面的行循环遍历整个字符串中的所有字符。

代码语言:javascript
复制
for (var i = 0; i < str.length; i++) {

对于每一个字符,它都会检查它是否使用某种名为regex的字母(谷歌获取更多信息)。

代码语言:javascript
复制
if (c.match(/[a-z]/i)) {

线

代码语言:javascript
复制
var code = str.charCodeAt(i);

获取表示字符串中"i“位置的字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字相关联。这就是下面两个if-语句的意义所在。我会解释小写字母,你应该能够看到大写字母是如何工作的。

代码语言:javascript
复制
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);

它首先从数字中减去65。这是因为第一个小写字母"a“的值为65。在此之后,它将结果以“量”的形式移动。这个“%-符号”看起来很奇怪。但它所做的只是将两边分开,然后返回"rest",即剩余数。例如,如果我们写:

代码语言:javascript
复制
5 % 2

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

代码语言:javascript
复制
output += c;

将该字符添加到结果字符串中。希望这能帮到你!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65149100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档