题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <algorithm> #include <iostream> #include <bitset> #include <cmath> using namespace std; char get_rev_char(char x) { string s; int num = 0; if (x >= '0' && x <= '9') { num = x - '0'; } if (x >= 'a' && x <= 'f') { num = 10 + x - 'a'; } if (x >= 'A' && x <= 'F') { num = 10 + x - 'A'; } bitset<4> binary(num); s = binary.to_string(); reverse(s.begin(), s.end()); int digit = 0; int res = 0; for (int i = s.size() - 1; i >= 0; i--) { res += (s[i] - '0') * (1 << digit); digit++; } if (res >= 0 && res <= 9) { return '0' + res; } if (res >= 10 && res <= 15) { return 'A' + res - 10; } return ' '; } int main() { string s; string s1, s2; int flag = 1; int size = 0; while (getline(cin, s)) { auto x = s.find(' '); s.erase(x, 1); for (int i = 0; i < s.size(); i++) { if (i % 2 == 0) { s1 += s[i]; } else { s2 += s[i]; } } sort(s1.begin(), s1.end()); sort(s2.begin(), s2.end()); size = s.size(); s.clear(); for (int i = 0; i < size; i++) { if (flag == 1) { s += s1[i / 2]; flag = 0; } else if (flag == 0) { s += s2[(i - 1) / 2]; flag = 1; } } for (int i = 0; i < s.size(); i++) { if((s[i]>='0'&&s[i]<='9')||(s[i]>='a'&&s[i]<='f'||(s[i>='A']&&s[i]<='F'))){ s[i] = get_rev_char(s[i]); } } cout << s << endl; } }