最暴力的方法就是自己把0-9的数字和26个字母一起自己算出来,这样排序好了那么就可以直接赋值,最坑的题里面的例子没有超过F的字母,而且也没有提数字和字母应该怎么排序,理解了许久它默认的字符排序应该是ASCII码的排序,调试了好久

#include <string>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

string transform_str(string str) {
    string out = str;

    for (int i = 0; i < str.size(); i++) {
        int dgt = 0;//digit
        bool changed = false, temp = false;
        unsigned tempbit = 0;
        if (str[i] >= '0' && str[i] <= '9') { dgt = str[i] - '0'; changed = true; }
        else if (str[i] >= 'A' && str[i] <= 'F') { dgt = str[i] - 'A' + 10; changed = true; }
        else if (str[i] >= 'a' && str[i] <= 'f') { dgt = str[i] - 'a' + 10; changed = true; }
        else out[i] = str[i];

        if (changed) {
            for (int j = 0; j < 4; j++) {
                temp = dgt & 1;
                dgt = dgt >> 1;
                tempbit = (tempbit << 1) + temp;
            }
            if (tempbit >= 10)out[i] = static_cast<char>(tempbit - 10 + 'A');
            else out[i] = static_cast<char>(tempbit + '0');
            changed = false;
        }//if

    }//for
    return out;
}


int main() {
    string str1, str2;
    string temp, out, fnal;
    while (cin >> str1 >> str2) {
        vector<char> even;
        vector<char> odd;
        temp = str1 + str2;
        for (int i = 0; i < temp.size(); i++) {

            if (i % 2 == 0) even.push_back(temp[i]);
            else odd.push_back(temp[i]);

        }
        sort(even.begin(), even.end(), [](const char& a, const char& b) {return
            a < b; });
        sort(odd.begin(), odd.end(), [](const char& a, const char& b) {return
            a < b; });
        fnal = temp;
        for (int i = 0, p = 0, q = 0; i < temp.size(); i++) {

            if (i % 2 == 0) fnal[i] = even[p++];
            else fnal[i] = odd[q++];
        }
        out = transform_str(fnal);

        cout << out << endl;
    }



}