题目描述
假设李明的密码为 5464640701,为了好记,他设计一个变换规则把这个密码变换成 LIming0701。
他设计的变换规则为:
1、小写字母按如下映射关系,进行映射。
(a、b、c) -> 2,
(d、e、f) -> 3,
(g、h、i) -> 4,
(j、k、l) -> 5,
(m、n、o) -> 6,
(p、q、r、s) -> 7,
(t、u、v) -> 8,
(w、x、y、z) -> 9.
2、大写字母变成小后前跳一位。
如:B,先变成小写 b,再往前跳一个字母,变成 a 然后参照第一条转换规则转换。
特殊说明:a 往前移动变成 z。
3、其他字符不做变化。
拥有 (!#$%^&*()_+-=[]{}|;:',.<>/?`~@)等特殊字符。但不包含空格。
输入描述
输入是一个明文,长度不超过 100 字符。
输出描述
输出转换后的密码。
输入示例
LIming0701
输出示例
5464640701
本题心得:C++中将大写字母转化为小写字母可将其ASCII码值-2。本题代码:
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
string codeTrans(string s) {
string result;
for (char ch : s) {
if (ch >= 'a' && ch <= 'z') {
if (ch >= 'a' && ch <= 'c') result.push_back('2');
else if (ch >= 'd' && ch <= 'f') result.push_back('3');
else if (ch >= 'g' && ch <= 'i') result.push_back('4');
else if (ch >= 'j' && ch <= 'l') result.push_back('5');
else if (ch >= 'm' && ch <= 'o') result.push_back('6');
else if (ch >= 'p' && ch <= 's') result.push_back('7');
else if (ch >= 't' && ch <= 'v') result.push_back('8');
else if (ch >= 'w' && ch <= 'z') result.push_back('9');
}
else if (ch >= 'A' && ch <= 'Z') {
ch += 32;
ch -= 1;
if (ch >= 'a' && ch <= 'c') result.push_back('2');
else if (ch >= 'd' && ch <= 'f') result.push_back('3');
else if (ch >= 'g' && ch <= 'i') result.push_back('4');
else if (ch >= 'j' && ch <= 'l') result.push_back('5');
else if (ch >= 'm' && ch <= 'o') result.push_back('6');
else if (ch >= 'p' && ch <= 's') result.push_back('7');
else if (ch >= 't' && ch <= 'v') result.push_back('8');
else if (ch < 'a' || (ch >= 'w' && ch <= 'z')) result.push_back('9');
}
else result.push_back(ch);
}
return result;
}
};
int main() {
Solution solution;
string s;
string result;
cin >> s;
result = solution.codeTrans(s);
cout << result << endl;
return 0;
}
461

被折叠的 条评论
为什么被折叠?



