描述
现在有一种密码变换算法。
九键手机键盘上的数字与字母的对应: 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个字符。
输出描述:
输出密码变换后的字符串
示例1
输入:
YUANzhi1987
输出:
zvbo9441987
实现
#include <stdio.h>
#include <string.h>
void fmtBuf(char *buf)
{
int len = strlen(buf);
for (int i = 0; i < len; i++) {
if ((buf[i] == '\r') || (buf[i] == '\n')) {
buf[i] = '\0';
}
}
}
char changePasswdLower(char c)
{
char val;
switch(c) {
case 'a': ;
case 'b': ;
case 'c': {
val = '2';
break;
}
case 'd':;
case 'e':;
case 'f': {
val = '3';
break;
}
case 'g':;
case 'h':;
case 'i':val = '4';break;
case 'j':;
case 'k':;
case 'l':val = '5';break;
case 'm':;
case 'n':;
case 'o':val = '6';break;
case 'p':;
case 'q':;
case 's':;
case 'r':val = '7';break;
case 't':;
case 'u':;
case 'v':val = '8';break;
case 'w':;
case 'x':;
case 'y':;
case 'z':val = '9';break;
}
return val;
}
void changePasswd(char *inbuf, char *outBuf)
{
int len = strlen(inbuf);
for (int i = 0; i < len; i++) {
if ((inbuf[i] >= 'A') && (inbuf[i] <= 'Z')) {
if (inbuf[i] == 'Z') {
outBuf[i] = 'a';
} else {
outBuf[i] = inbuf[i] - 'A' + 'a' + 1;
}
} else if ((inbuf[i] >= 'a') && (inbuf[i] <= 'z')) {
outBuf[i] = changePasswdLower(inbuf[i]);
} else if ((inbuf[i] >= '0') && (inbuf[i] <= '9')) {
outBuf[i] = inbuf[i];
} else {
// do nothing
}
}
}
int main()
{
char inBuf[101] = {0};
char outBuf[101] = {0};
fgets(inBuf, sizeof(inBuf), stdin);
fmtBuf(inBuf);
// printf("inBuf: %s\n", inBuf);
changePasswd(inBuf, outBuf);
printf("%s\n", outBuf);
return 0;
}