javascript - JS ROT 13 部分工作,但不是全部工作
问题描述
我不知道我在这个函数中的错误在哪里。它适用于某些字符串,但不适用于所有字符串。你能不能给我一些建议。我想接受一个字符串,该函数应该返回一个字符串 + 字母表中的 13 个字符。如果有数字或特殊字符,请按原样打印所以它适用,rot13("aaaabbbb55")
但不适用于rot13("father4")
感谢您的帮助!
function rot13(message) {
var ceasar = message.toLowerCase().split("");
var alpha = "abcdefghijklmnopqrstuvwxyz".split("");
for (i = 0; i < ceasar.length; i++) {
var letter = ""
if (ceasar[i].match(/[a-z]/gi)) {
letter = alpha.indexOf(ceasar[i])
ceasar[i] = alpha[letter + 13]
} else {
continue
};
}
return ceasar.join("")
}
解决方案
正如Barmar 所说:
更改
letter + 13
为(letter + 13) % alpha.length
使其环绕。
基本上,该行的问题ceasar[i] = alpha[letter + 13]
在于,当一个字母在字母表的中间点之后时,letter + 13
将导致索引超出范围。例如,字母t
infather
对应于索引 19(从 0 开始的索引)。19 + 13 = 32,不对应alpha
.
使用模块运算符(letter + 13) % alpha.length
将“换行” 32 回到 6,这将是字母g
。
推荐阅读
- javascript - 在对象数组中查找 angular 6/typescript/javascript
- javascript - flv.js 无法使用 avc1 编解码器
- html - 将值从一个表传递到另一个 html 页面
- c++ - 如何使用中值滤波算法去除胡椒噪声
- c++ - 在 if 语句中声明时如何访问类对象?(在 C++ 中)
- java - java - 如何在java swing中加载本地html文件?
- centos7 - Clearcase - 无法访问 VOB - ls:读取目录 - 权限被拒绝
- android - 如何在 viewpager 中使用 webview 的水平滚动?
- swift - 文本文件中的 Swift 转换格式(字符串解析)
- spring-boot - spring boot配置自定义sql