将输入的两个字符串合并后按下标的奇偶放入两个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")