CF831B Keyboard Layouts 题解

Content

给你 \(26\) 个字母的映射(都是小写,大写的映射方式相同),再给你一个字符串 \(s\),求它的映射结果(如果有非字母的字符保持不变)。

数据范围:\(1\leqslant |s|\leqslant 1000\)

Solution

强大的 \(\texttt{map}\) 正好能够为我们做出映射的功能,我们直接存储每个字母的映射再直接将原字符串映射即可。

Code

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <cstring>
#include <map>
using namespace std;

string a, b, c;
map<char, char> mm;

int main() {
	cin >> a >> b;
	int len = a.size();
	for(int i = 0; i < len; ++i) mm[a[i]] = b[i], mm[a[i] - 32] = b[i] - 32;
	cin >> c;
	len = c.size();
	for(int i = 0; i < len; ++i)
		if((c[i] >= 'a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z'))
			c[i] = mm[c[i]];
	cout << c;
	return 0;
}
posted @ 2021-12-16 15:14  Eason_AC  阅读(37)  评论(0)    收藏  举报