其实测试例子中都是小写字母,但是我还是考虑了大写以及非字母因素
#include<iostream>
#include<string>
#include<vector>
#include<unordered_set>
using namespace std;
int main () {
string sKey, sStr;
while(getline(cin, sKey) && getline(cin, sStr)) {
// 先把key中的大写字符全变为小写
for (int i = 0; i < sKey.size(); ++i) {
if (isupper(sKey[i]))
sKey[i] += 32;
}
// 用set记录有多少个元素
unordered_set<char> set;
for (int i = 0; i < sKey.size(); ++i) {
set.insert(sKey[i]);
}
// 输入不重样字符的key
vector<char> arr(26);
int j = 0;
for(int i = 0; i < sKey.size(); ++i) {
int flag = 0;
for (char c : arr) {
if (c == sKey[i])
flag = 1;
}
if (flag == 0)
arr[j++] = sKey[i];
}
// 输入剩余的字符
for(int i = 0; i < 26; ++i) {
if (set.count('a' + i) == 0) {
arr[j++] = 'a' + i;
}
}
// 输出
string ans;
for (int i = 0; i < sStr.size(); ++i) {
if (isupper(sStr[i])) {
ans += (arr[sStr[i] - 'A'] - 'a' + 'A');
continue;
} else if (islower(sStr[i])) {
ans += arr[sStr[i] - 'a'];
continue;
} else {
ans += sStr[i];
}
}
cout << ans << endl;
}
}

京公网安备 11010502036488号