/* 思路: 分三个步骤处理 1. 把字符串拼接起来 2. 借助两个vector<int>,对合并后的字符串排序 3. 利用密码对照表实现字符转换 注意使用函数 str.find_last_of() */ #include <algorithm> #include <cctype> #include <iostream> #include <vector> using namespace std; void mysort(string& str) { vector<char> v1, v2; int len = str.length(); for (int i = 0; i < len; ++i) { if (i % 2) { v1.push_back(str[i]); } else { v2.push_back(str[i]); } } sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); for (int i = 0, i1 = 0, i2 = 0; i < len; ++i) { if (i % 2) { str[i] = v1[i1]; i1++; } else { str[i] = v2[i2]; i2++; } } } string a("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); string b("084c2a6e195d3b7fghijklmnopqrstuvwxyz5d3b7fGHIJKLMNOPQRSTUVWXYZ"); void myconvert(string& str) { int len = str.length(); for (int i = 0; i < len; ++i) { // 只对字母和数字进行处理。 if ( isalpha(str[i]) || isdigit(str[i]) ){ str[i] = b[a.find_last_of(str[i])]; if ( islower(str[i]) && str[i] <= 'f') { str[i] = toupper(str[i]); } } } return; } int main() { string str1, str2; cin >> str1 >> str2; // 1. 合并两个字符串 string str = str1 + str2; // 2. 按奇数位与偶数位排序 mysort(str); // 3. 对排序后的字符进行转换 myconvert(str); cout << str << endl; } // 64 位输出请用 printf("%lld")