1. 题目描述
现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 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≤n≤100
-
输入描述: 输入一组密码,长度不超过100个字符。
-
输出描述: 输出密码变换后的字符串
2. 解答题目
package main
import (
"fmt"
"strings"
)
func main() {
m := map[string]byte{
"abc": 50,
"def": 51,
"ghi": 52,
"jkl": 53,
"mno": 54,
"pqrs": 55,
"tuv": 56,
"wxyz": 57,
}
var s string
fmt.Scan(&s)
bt := make([]byte, 0)
for i := 0; i < len(s); i++ {
switch {
//处理大写字母
case s[i] >= 'A' && s[i] <= 'Z':
if s[i] != 'Z' {
bt = append(bt, s[i]+33)
} else {
bt = append(bt, 'a')
}
//处理小写字母
case s[i] >= 'a' && s[i] <= 'z':
for k, v := range m {
if strings.Contains(k, string(s[i])) {
bt = append(bt, v)
}
}
//处理数字
default:
bt = append(bt, s[i])
}
}
fmt.Println(string(bt))
}