题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <cctype>
#include <iostream>
using namespace std;
string string_sort(string s)
{
for (size_t i = 0; i < s.size() - 2; ++i) {
for (size_t j = i + 2; j < s.size(); j += 2) {
if (s[i] > s[j]) {
auto tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
}
return s;
}
int to_dec(char c)
{
if (isalpha(c)) {
c = toupper(c);
return c - 'A' + 10;
}
return c - '0' + 0;
}
char to_hex(int n)
{
if (n >= 10) {
return n - 10 + 'A';
}
return n + '0';
}
bool is_hex(char c)
{
return ('0' <= c && c <= '9')
|| ('a' <= c && c <= 'f')
|| ('A' <= c && c <= 'F');
}
string transform(string s)
{
for (size_t i = 0; i < s.size(); ++i) {
char c = s[i];
if (!is_hex(c)) {
continue;
}
int n = to_dec(c);
int v = ((n & 0b1000) >> 3)
+ ((n & 0b0100) >> 1)
+ ((n & 0b0010) << 1)
+ ((n & 0b0001) << 3);
char c2 = to_hex(v);
s[i] = c2;
}
return s;
}
int main() {
string s1, s2;
while (cin >> s1 >> s2) {
auto s = string_sort(s1 + s2);
s = transform(s);
cout << s << endl;
}
}
// 64 位输出请用 printf("%lld")
