题解 | 字符串合并处理

字符串合并处理

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")

#转行#
全部评论

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务