题解 | 字符串合并处理
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string merge_s_and_t(string s, string t)
{
string ret = s + t;
return ret;
}
string sort_according_ascii_odd(string s)
{
string ret;
ret = s;
string tmp;
for(size_t i = 1; i <= s.size(); i += 2){
tmp.push_back(s[i - 1]);
}
sort(tmp.begin(), tmp.end());
//cout << "tmp: " << tmp << endl;
//cout << "ret 1: " << ret << endl;
for(size_t i = 1; i <= s.size(); i += 2){
static size_t index = 0;
ret[i - 1] = tmp[index];
index++;
}
//cout << "ret 2: " << ret << endl;
return ret;
}
string sort_according_ascii_even(string s)
{
string ret;
ret = s;
string tmp;
for(size_t i = 2; i <= s.size(); i += 2){
tmp.push_back(s[i - 1]);
}
sort(tmp.begin(), tmp.end());
for(size_t i = 2; i <= s.size(); i += 2){
static size_t index = 0;
ret[i - 1] = tmp[index];
index++;
}
return ret;
}
int main()
{
string s,t;
string res;
cin >> s >> t;
string u = merge_s_and_t(s,t);
string tmp = sort_according_ascii_odd(u);
string u1 = sort_according_ascii_even(tmp);
for(size_t i = 0; i < u1.size(); i++){
int dec;
if((u1[i] >= '0' && u1[i] <= '9')){
dec = u1[i] - '0';
}else if(u1[i] >= 'a' && u1[i] <= 'f'){
dec = u1[i] - 'a' + 10;
}else if(u1[i] >= 'A' && u1[i] <= 'F'){
dec = u1[i] - 'A' + 10;
}else{
res.push_back(u1[i]);
continue;
}
string bin_str = "";
for(int i = 3; i >= 0; i--){
if(dec & (1 << i)){
bin_str.push_back('1');
}else{
bin_str.push_back('0');
}
}
reverse(bin_str.begin(), bin_str.end());
int num = 0;
for(int i = 0; i < 4; i++){
num = num * 2 + (bin_str[i] - '0');
}
if(num < 10){
char tmp = num + '0';
res.push_back(tmp);
}else{
char tmp = 'A' + (num - 10);
res.push_back(tmp);
}
}
cout << res << endl;
}
// 64 位输出请用 printf("%lld")
