题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <cctype>
#include <iostream>
#include <algorithm>
#include <string>
#include <bitset>
using namespace std;
void trans(char& a){
if(isdigit(a) || (a >= 'A' && a <= 'F') || (a >='a' && a <= 'f')){
int tar;
if((a >= 'A' && a <= 'F') || (a >='a' && a <= 'f')){
a = toupper(a);
tar = static_cast<int>(a-'A' + 10);
} else {
tar = static_cast<int>(a-'0');
}
string s = bitset<4>(tar).to_string();
reverse(s.begin(), s.end());
bitset<4> bs(s);
auto res = bs.to_ulong();
if(res > 9){
a = static_cast<char> ('A' + (res - 10));
} else {
a = static_cast<char> ('0' + res);
}
}
}
int main() {
string s1, s2;
cin >> s1 >> s2;
string s = s1 + s2;
// cout << s <<endl;
int n = s.size();
s1.clear();
s2.clear();
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
s1 += s[i];
} else {
s2 += s[i];
}
}
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
int loc1 = 0, loc2 = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
s[i] = s1[loc1++];
} else {
s[i] = s2[loc2++];
}
}
// cout << s << endl;
for(int i=0; i<n; i++){
trans(s[i]);
}
cout << s << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
何 2进制 有关的题目可以多考虑 bitset 这个模版 非常好用

