【发布时间】:2021-02-05 02:35:14
【问题描述】:
我正在尝试完成一个 codewars 挑战作为我的练习编码,因为我将进行初学者技术测试以进入编码培训计划。如果您想知道挑战是什么:https://www.codewars.com/kata/530e15517bc88ac656000716/train/javascript
我已经编写了符合预期的代码。我将在下面引用 Codewars.com:
ROT13 是一个简单的字母替换密码,用于替换一个字母 字母表中的字母 13 个字母。 ROT13 是一个 凯撒密码的例子。
创建一个接受字符串并返回加密字符串的函数 与 Rot13。如果包含数字或特殊字符 字符串,它们应该按原样返回。只有来自的信件 拉丁/英文字母应该被移动,就像原来的 Rot13 “实施”。
我的代码获取测试字符串 "grfg" 并将其转换为单词 "test",这相当于字母表中前面的 13 个字母,但是,如果我将字符串作为 "Grfg" 传递,大写为 @987654325 @it 返回"gest" 表示它不会替换大写字母。
如果我以小写形式传递"test",它将返回"grfg",因此它也可以向后工作,但是,如果我传递"Test",它将返回"trfg",而不是再次替换大写字母,而是返回相同的字母。
请在下面找到我写的代码: (请记住,我正在开始编写代码,因此可能有不止几种更有效的代码片段可以做到这一点。)
function rot13(message){
let abc = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q",
"r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
let msg = message.split("");
for (let i = 0; i < abc.length; i++){
for (let j = 0; j < abc.length; j++) {
if (msg[j] === abc[i]) {
ind = parseInt(abc.indexOf(i), 0) + 13;
msg[j] = abc.slice(i + 13, i + 14);
};
};
};
return msg.join("").toLowerCase();
};
rot13("test");
请您帮我弄清楚我的错误是什么或我应该知道什么以确保我的代码将转换字符串而不考虑大写或小写?
提前非常感谢:D
【问题讨论】:
标签: javascript for-loop