最暴力的方法就是自己把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;
}
}