【发布时间】:2016-04-23 18:29:22
【问题描述】:
我正在尝试在 Javascript 中创建凯撒密码,但无法弄清楚如何进行转换。可能是我的方法使其复杂化,但我试图了解如何设置添加数字的最大值,但从最小数字开始继续添加。这是我的代码:
$(document).ready(function(){
var alpha = [];
var encoded = [];
alpha = {
'1': 'a',
'2': 'b',
'3': 'c',
'4': 'd',
'5': 'e',
'6': 'f',
'7': 'g',
'8': 'h',
'9': 'i',
'10': 'j',
'11': 'k',
'12': 'l',
'13': 'm',
'14': 'n',
'15': 'o',
'16': 'p',
'17': 'q',
'18': 'r',
'19': 's',
'20': 't',
'21': 'u',
'22': 'v',
'23': 'w',
'24': 'x',
'25': 'y',
'26': 'z'
};
$('#cipher_form').submit(function(event){
event.preventDefault();
var input = $('#cipher_input').val();
var key = $('#cipher_key').val();
var chars = input.split('');
for(var i = 0; i<chars.length; i++){
console.log(chars[i]);
for(var index in alpha){
if(alpha[index] == input[i]){
encoded.push(index);
}
}
}
for(var i=0; i<encoded.length; i++){
alert(encoded[i]);
}
});
});
所以当表单提交时,我会抓取输入值,并将其转换为字符数组。然后我遍历我的对象并找到与字符匹配的键值对并将键推送到另一个数组。我的计划是遍历我的密钥数组并将 cipher_key 添加到该数字。
因此,如果我的对象中的字母“o”是“15”,而我的 cipher_key 是“5”,它将添加 15+5 并以“20”结尾,即“t”。我看到的问题是,如果我的字母是“z”并且你加上 26 + 5,你最终会得到 31,这在我的对象中不存在。
我的挑战是找出如何将 cipher_key 添加到我的号码一直到 26,但如果超过 26,请重置并从 1 开始并继续添加。因此,如果字母为“z”且 cipher_key 为“5”,则需要 26+5 并以字母“e”结束。
这可能吗?还是我的方法在这方面完全错误?
【问题讨论】:
-
我会使用基于零的结构,然后使用剩余运算符
%将数字移动到正确的范围。另一点是使用一个对象,就像你拥有的一样,用于字母到数字的查找。{'A': 0, 'B': 1, ...}
标签: javascript arrays encryption caesar-cipher