寻求凯撒密码的解释
Seeking an explanation of Caesar Cipher code
在尝试(但失败了)为 Odin 项目练习编写凯撒密码作业后,我终于屈服并查找了答案。不过我不是很懂。
我正在寻求对每一行的解释及其工作原理。我复制的代码对每一行做了一些简短的描述,但我仍然不明白它是如何工作的。
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;
};
第一个 if 语句:
if (amount < 0) {
return caesar(str, amount + 26)
}
通过调用自身来确保移位量为0及以上。然后下一行循环遍历整个字符串中的所有字符。
for (var i = 0; i < str.length; i++) {
对于每个字符,它使用称为正则表达式的东西检查它是否是一个字母(Google 了解更多信息)
if (c.match(/[a-z]/i)) {
行
var code = str.charCodeAt(i);
获取表示字符串中位置“i”处字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字与之相关联。这就是以下两个 if 语句的用途。我会解释小写字母的,你应该也能看到大写字母的工作原理。
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);
首先从数字中减去 65。这是因为第一个小写字母“a”的值为 65。之后它将结果移动“数量”。 % 符号可能看起来很奇怪。但它所做的只是将两侧分开并返回“其余部分”,即剩余数量。例如,如果我们写:
5 % 2
它等于 1。这样做是为了“循环”数字并将其保持在 0 到 26 之间。之后它加回 65 并将数字变回一个字符。最后一行:
output += c;
将字符添加到结果字符串中。希望这对您有所帮助!
在尝试(但失败了)为 Odin 项目练习编写凯撒密码作业后,我终于屈服并查找了答案。不过我不是很懂。
我正在寻求对每一行的解释及其工作原理。我复制的代码对每一行做了一些简短的描述,但我仍然不明白它是如何工作的。
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;
};
第一个 if 语句:
if (amount < 0) {
return caesar(str, amount + 26)
}
通过调用自身来确保移位量为0及以上。然后下一行循环遍历整个字符串中的所有字符。
for (var i = 0; i < str.length; i++) {
对于每个字符,它使用称为正则表达式的东西检查它是否是一个字母(Google 了解更多信息)
if (c.match(/[a-z]/i)) {
行
var code = str.charCodeAt(i);
获取表示字符串中位置“i”处字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字与之相关联。这就是以下两个 if 语句的用途。我会解释小写字母的,你应该也能看到大写字母的工作原理。
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);
首先从数字中减去 65。这是因为第一个小写字母“a”的值为 65。之后它将结果移动“数量”。 % 符号可能看起来很奇怪。但它所做的只是将两侧分开并返回“其余部分”,即剩余数量。例如,如果我们写:
5 % 2
它等于 1。这样做是为了“循环”数字并将其保持在 0 到 26 之间。之后它加回 65 并将数字变回一个字符。最后一行:
output += c;
将字符添加到结果字符串中。希望这对您有所帮助!