问题:
已知一个英文单词,英文单词中只包含大写字母“A—Z”与小写字母“a—z”。你的任务是将英文单词翻译成密码文。翻译规则是把所有字母用它后面的第三个字母替换,并假设字符a接在字符z后面,字符A接在字符Z后面。例如:zero将被翻译成chur。
输入与输出要求:
输入一个英文单词,每个英文单词长度不超过100,单词以回车换行符‘n’结束输入。输出对应字符串的密码文,占一行。
程序运行效果:
Sample 1:
zero
chur
Sample 2:
AZazbf
DCdcei
代码:
大概思路是:获取获取每个英文字符的ASC码值,向后加3位,超出范围的另外处理
<body>
<input type="text" id="letter" />
<button id="result">转换</button>
<script>
window.onload = function() {
var letter = document.getElementById('letter');
var result = document.getElementById('result');
var upperMin = 65; //大写最小asc
var upperMax = 90; //大写最大asc
var lowerMin = 97; //小写最小asc
var lowerMax = 122; //小写最大asc
result.onclick = function() {
var s = [];
var letterStr = letter.value;
if(!/[a-zA-Z]/.test(letterStr)) {
alert('请输入大小英文字符');
return;
}
for(var i=0; i<letterStr.length; i++) {
var _code = letterStr[i].charCodeAt(); //获取每个字符的asc码
var _move = _code+3; //向后移动3位
//输入大写且asc大于90 或 输入小写且值大于122,均超出英文字符的范围,都减去23
if((/[A-Z]/.test(letterStr[i])&&_move > upperMax) || (/[a-z]/.test(letterStr[i])&&_move > lowerMax)) {
//超出最大asc,减去23
_move = _code - 23;
}
s.push(String.fromCharCode(_move));
}
alert(s.join(''))
}
}
</script>
</body>
除了这种实现方法,还有更好的方法实现吗?
存在数组里面,循环移位就好了