我试图在Javascript中创建一个caesar密码,并且无法弄清楚如何进行转换。可能是我的方法使它变得复杂,但我试图理解如何设置添加数字的最大值,但是从最小数字开始继续添加。这是我的代码:
$(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添加到该数字。
所以,如果这封信&#39; o&#39;是&#39; 15&#39;在我的对象中,我的cipher_key是&#39; 5&#39;,它会添加15 + 5并最终得到&#39; 20&#39;这将是&#39; t。我看到的问题是,如果我的信是&#39; z&#39;并且你添加了26 + 5,你最终会得到31,而我的对象中并不存在。
我的挑战是找出如何将cipher_key添加到我的号码一直到26,但是如果它超过26,则重置并从1开始并继续添加。所以如果这封信是&#39; z&#39;并且cipher_key是&#39; 5&#39;它需要26 + 5并最终在&#39; 5&#39;对于这封信&#39; e&#39;。
这可能吗?或者我的方法完全错了?
答案 0 :(得分:1)
只需将数字放在简单数组中,但按顺序排列。
var alpha = ['a', 'b', 'c', ... 'z']
将其数值设为var value = alpha.indexOf(the_number);
然后添加密钥,并使用%
防止超出您的金额。
var newNumValue = (value + key) % 26;
我想是的。它涵盖了这个问题。除此之外 - 你的方法很好,是的。
不同的方法
此外 - 如果您的文字可能包含一些特殊符号,我建议从ASCII table获取初始值。它将涵盖所有符号以及不同的小写和大写字母。而且您不需要存储该阵列。
var value = yourChar.charCodeAt(0);
要从ascii代码中获取符号,请转到var symbol = value.fromCharCode();
希望这会有所帮助。