密码转化映射

题目描述

假设李明的密码为 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值