将输入的两个字符串合并后按下标的奇偶放入两个vector中,排序后按要求对每个字符进行处理,最终合成结果输出。
#include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; char transform(char letter); int main() { string s1, s2; cin >> s1 >> s2; string s = s1 + s2; vector<char> letters1; vector<char> letters2; for (int i = 0; i < s.length(); i++) { if (i % 2 == 0) { letters1.push_back(s.at(i)); } else { letters2.push_back(s.at(i)); } } sort(letters1.begin(), letters1.end()); sort(letters2.begin(), letters2.end()); for (char & letter : letters1) { letter = transform(letter); } for (char & letter : letters2) { letter = transform(letter); } for (int i = 0; i < s.length(); i++) { if (i % 2 == 0) { s.at(i) = letters1.at(i / 2); } else { s.at(i) = letters2.at(i / 2); } } cout << s; return 0; } char transform(char letter) { int num; if (tolower(letter) >= 'a' && tolower(letter) <= 'f') { num = tolower(letter) - 'a' + 10; } else if (letter >= '0' && letter <= '9'){ num = letter - '0'; } else { return letter; } int sum = 0; for (int i = 0; i < 4; i++) { sum += (num % 2) * pow(2, 3 - i); num /= 2; } if (sum < 10) { return sum + '0'; } else { return sum - 10 + 'A'; } } // 64 位输出请用 printf("%lld")