#include <iostream> using namespace std; #include <string> #include <sstream> #include <map> #include <cctype> int main() { string str1; string str2; getline(cin, str1); getline(cin, str2); map<char, char> keyMap; map<char, bool> wordMap; istringstream is(str1); char word; char key; int cnt = 0; while (is >> word) { if (wordMap.count(word) == 0) { wordMap.insert(pair<char, bool>(word, true)); if (islower(word)) { key = 'a' + cnt; keyMap.insert(pair<char, char>(key, word)); word = toupper(word); key = toupper(key); keyMap.insert(pair<char, char>(key, word)); wordMap.insert(pair<char, bool>(word, true)); } else if (isupper(word)) { key = 'A' + cnt; keyMap.insert(pair<char, char>(key, word)); word = tolower(word); key = tolower(key); keyMap.insert(pair<char, char>(key, word)); wordMap.insert(pair<char, bool>(word, true)); } cnt++; } } for (int i = 0; i <= 25; i++) { word = 'a' + i; if (wordMap.count(word) == 0) { key = 'a' + cnt; wordMap.insert(pair<char, bool>(word, true)); keyMap.insert(pair<char, char>(key, word)); word = toupper(word); key = toupper(key); keyMap.insert(pair<char, char>(key, word)); wordMap.insert(pair<char, bool>(word, true)); cnt++; } } for (int i = 0; i < str2.size(); i++) { cout <<keyMap[str2[i]]; } }
用两个图,一个图存曾经输入过的字母,另一个存字母密文的对应关系就行,记得把大小写都存进去