刷题-字符串大小写以及数字转换

题目描述

现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.
而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。

数据范围:

输入的字符串长度满足 1 \le n \le 100 \1≤n≤100

输入描述:

输入一组密码,长度不超过100个字符。

输出描述:

输出密码变换后的字符串

示例1

输入
YUANzhi1987
输出
zvbo9441987

const rl = require("readline").createInterface({ input: process.stdin });
rl.on('line',function(data){
    const result= []
    const input = data.split('')
    // 以索引代替对应的数字
    let myKey = ['0','1','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
    input.forEach((item,index)=>{
        let charCode = item.charCodeAt()
        // 如果是小写则判断是数组中哪个
        // console.log(item+'---'+charCode)
        if(charCode>=97) {
            for(let i =0;i<myKey.length;i++) {
                if(myKey[i].includes(item)){
                    result.push(i)
                    break;
                }
            }
        }
        // 如果是数字的ascii码则不做转换
        else if(charCode>=48 && charCode<=57){
           result.push(item)
        }
        // 字母'A'对应65,'a'对应97 中间差距为32,加1则是33
        else{
            if(item==='Z'){
                result.push('a')
            }
            else{
                result.push(String.fromCharCode(charCode+33))
            }
        }
        
    })
    console.log(result.join(''))
})
posted @ 2022-10-01 09:29  含若飞  阅读(57)  评论(0编辑  收藏  举报