题解 | 字符串合并处理
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f?tpId=37&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu&dayCountBigMember=%E8%BF%9E%E7%BB%AD%E5%8C%85%E6%9C%88
#include <iostream> #include<vector> #include<algorithm> #include<string> using namespace std; string tenTobin(int ten) { //十进制转化为二进制,逆袭 string s; int i, j; if (ten == 0)return "0000"; while (ten > 1) { j = ten % 2; ten = ten / 2; if (j) { s += '1'; } else { s += '0'; } } s += '1'; int acc = 4 - s.size(); while (acc) { s += '0'; acc--; } return s; } char binTohex(string s) { //二进制转化为16进制 int p = 0; char c; for (int i = 0; i < s.size(); i++) { p = s[i] - '0' + p * 2; } if (p > 9) { c = p - 10 + 'A'; } else c = p + '0'; return c; } int main() { string s, t, u; vector<char>even, odd; cin >> s >> t; u = s + t; int us = u.size(); for (int i = 0; i < us; i++) { //先将奇偶分开 if (i % 2)even.push_back(u[i]); else if (!(i % 2))odd.push_back(u[i]); } sort(odd.begin(), odd.end()); //再排序 sort(even.begin(), even.end()); int p = 0, q = 0; for (int i = 0; i < us; i++) { //再合并 if (i % 2)u[i] = even[p++]; else if (!(i % 2))u[i] = odd[q++]; } for (int i = 0; i < us; i++) { if ((u[i] >= '0' && u[i] <= '9') || (u[i] >= 'a' && u[i] <= 'f') || //如果是16进制字符 (u[i] >= 'A' && u[i] <= 'F')) { string s(1, u[i]); int ten = stoi(s, nullptr, 16); //将16进制转换为10进制 u[i] = binTohex(tenTobin(ten)); //转化为16进制 cout << u[i]; } else cout << u[i]; //不是16进制字符,直接输出 } } // 64 位输出请用 printf("%lld")#转行#