题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <iostream>
#include <set>
#include <string>
#include <algorithm>
using namespace std;
string shi2er(int n)
{
char ch[2] = {'0','1'};
string res_er;
int mod;
while(n){
mod = n % 2;
res_er += ch[mod];
n = n/2;
}
for(int i=res_er.size();i<4;i++)
{
res_er += ch[0];
}
reverse(res_er.begin(),res_er.end());
return res_er;
}
char ertochar(string str_in)
{
int int_char = 0,k = 1;
// for(int i=str_in.size();i<0;i--)
// {
// int_char += k * (str_in[i] - '0');
// k = k * 2;
// }
for(int i=0;i<str_in.size();i++)
{
int_char += k * (str_in[i] - '0');
k = k * 2;
}
// cout << "int_char" << int_char << endl;
// 48 65 97 0~15
if(int_char<10){
return int_char + '0';
}else{
return int_char - 10 + 'A';
}
}
int main() {
// int a, b;
string a,b;
char c;
while (cin >> a >> b) { // 注意 while 处理多个 case
// cout << a << " " << b << endl;
//拼接字符串
//sort();
string c;
multiset<char> set_ji;
multiset<char> set_ou;
// set<int> bc;
// set_ji.insert(0);
// set_ou.insert(0);
int len_a = a.size();
int len_b = b.size();
for(int i=0;i<len_a;i++)
{
if(i%2) //ji
{
set_ji.insert(a[i]);
}
else{ //ou
set_ou.insert(a[i]);
}
}
for(int j=0;j<len_b;j++)
{
if((j+len_a)%2){
set_ji.insert(b[j]);
}else{
set_ou.insert(b[j]);
}
}
multiset<char>::iterator it_ou = set_ou.begin();
multiset<char>::iterator it_ji = set_ji.begin();
//char => int
//int => hex
//hex ==> char
int shijinzhi;
// for(int k=0;k<len_a + len_b;k++)
while(it_ou != set_ou.end() || it_ji != set_ji.end())
{
if(it_ou != set_ou.end())
{
// cout << *it_ou << endl;
//panduan '0~9' 'a'~'z' 'A'~'Z'
if('0' <= *it_ou && *it_ou <= '9'){
shijinzhi = *it_ou - '0';
cout << ertochar(shi2er(shijinzhi));
}
else if('a' <= *it_ou && *it_ou <= 'f'){
shijinzhi = *it_ou - 'a' + 10;
cout << ertochar(shi2er(shijinzhi));
}
else if('A' <= *it_ou && *it_ou <= 'F'){
shijinzhi = *it_ou - 'A' + 10;
cout << ertochar(shi2er(shijinzhi));
}else{
cout << *it_ou;
}
// cout << int(*it_ou) << endl;
// cout << shijinzhi << endl;
// cout << "shi2er " << shi2er(shijinzhi) << endl;
// cout << ertochar(shi2er(shijinzhi));
it_ou++;
}
if(it_ji != set_ji.end())
{
// cout << *it_ji << endl;
if('0' <= *it_ji && *it_ji <= '9'){
shijinzhi = *it_ji - '0';
cout << ertochar(shi2er(shijinzhi));
}
else if('a' <= *it_ji && *it_ji <= 'f'){
shijinzhi = *it_ji - 'a'+ 10;
cout << ertochar(shi2er(shijinzhi));
}
else if('A' <= *it_ji && *it_ji <= 'F'){
shijinzhi = *it_ji - 'A'+ 10;
cout << ertochar(shi2er(shijinzhi));
}else{
cout << *it_ji;
}
// cout << int(*it_ji) << endl;
// cout << shijinzhi << endl;
// cout << "shi2er " << shi2er(shijinzhi) << endl;
it_ji++;
}
}
cout << endl;
}
}
// 64 位输出请用 printf("%lld")

