【发布时间】:2017-08-08 19:30:05
【问题描述】:
我正在制作将字母移动 13 位的 Cesar's Cypher。它有效,但每个单词的最后一个字母重复。我知道可能有一种更有效的方法来编写它,但这是我的代码。
function rot13(str) {
var letters = ["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"];
var word = "";
var z = 30;
for (i = 0; i < str.length; i++) {
if (str.substring(i, i + 1) === " ") {
word = word + str.substring(i, i + 1);
}
for (x = 0; x < letters.length; x++) {
if (str.substring(i, i + 1) === letters[x]) {
z = x; //18
}
}
var n = z + 13; //31
if (n >= 26) {
word = word + letters[13 - (26 - z)];
} else if (n < 26)
word = word + letters[13 + z];
}
return word;
}
rot13("LBH QVQ VG!");
例如 LBH QVQ VG!打印出 YOU UDID DITT 而不是 YOU DID IT!。另外,我是 javascript 新手,所以如果有任何语法看起来不对,请纠正我。
【问题讨论】:
-
使用
{ a: "m", b: "n" ... }形式的查找表在这里您可能会更轻松,您可以使用函数将每个字母直接替换为replace。跨度> -
@MaciejKwas 这并不能解释他在这里做错了什么。
-
如果你真的想学习编程,这似乎是一个学习如何使用调试器的好机会。
标签: javascript