利用set
#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
string s1, s2;
getline(cin, s1, '\n');
getline(cin, s2, '\n');
// 获得key
set<char> s_key; // 用于去重
vector<char> v_key;
for (int i = 0; i < s1.size(); i++) {
if (s_key.find(s1[i]) != s_key.end()) { continue; }
else {
s_key.insert(s1[i]);
v_key.push_back(s1[i]);
}
}
// 扩展key
for (int i = 0; i < 26; i++) {
char ch = 'a' + i;
if (s_key.find(ch) != s_key.end()) { continue; }
else { v_key.push_back(ch); }
}
// 建立映射
unordered_map<char,char> u_map;
int k = 0;
for (vector<char>::iterator iter = v_key.begin(); iter != v_key.end(); iter++) {
auto key_val = *iter;
char ch = 'a' + k;
u_map[ch] = key_val;
k++;
}
// 进行加密
for (int i = 0; i < s2.size(); i++) {
if (s2[i] >= 'A' && s2[i] <= 'Z') {
// 大写字符
char temp = s2[i] + 32; // 转换为小写
char temp_key = u_map[temp];
temp_key = temp_key - 32; // 小写转换为大写
s2[i] = temp_key;
} else if (s2[i] >= 'a' && s2[i] <= 'z') {
// 小写字符
char temp_key = u_map[s2[i]];
s2[i] = temp_key;
} else if (s2[i] = ' ') continue;
}
cout << s2 << endl;
return 0;
}

京公网安备 11010502036488号