其实测试例子中都是小写字母,但是我还是考虑了大写以及非字母因素
#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; } }