题解 | 字符串合并处理

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string merge_s_and_t(string s, string t)
{
    string ret = s + t;
    return ret;
}

string sort_according_ascii_odd(string s)
{
    string ret;
    ret = s;
    string tmp;
    for(size_t i = 1; i <= s.size(); i += 2){
        tmp.push_back(s[i - 1]);
    }
    sort(tmp.begin(), tmp.end());
    //cout << "tmp: " << tmp << endl;
    //cout << "ret 1: " << ret << endl;
    for(size_t i = 1; i <= s.size(); i += 2){
        static size_t index = 0;
        ret[i - 1] = tmp[index];
        index++;
    }
    //cout << "ret 2: " << ret << endl;
    return ret;
}

string sort_according_ascii_even(string s)
{
    string ret;
    ret = s;
    string tmp;
    for(size_t i = 2; i <= s.size(); i += 2){
        tmp.push_back(s[i - 1]);
    }
    sort(tmp.begin(), tmp.end());
    for(size_t i = 2; i <= s.size(); i += 2){
        static size_t index = 0;
        ret[i - 1] = tmp[index];
        index++;
    }
    return ret;
}

int main() 
{
    string s,t;
    string res;
    cin >> s >> t;
    string u = merge_s_and_t(s,t);
    string tmp = sort_according_ascii_odd(u);
    string u1 = sort_according_ascii_even(tmp);
    for(size_t i = 0; i < u1.size(); i++){
        int dec;
        if((u1[i] >= '0' && u1[i] <= '9')){
            dec = u1[i] - '0';
        }else if(u1[i] >= 'a' && u1[i] <= 'f'){
            dec = u1[i] - 'a' + 10;
        }else if(u1[i] >= 'A' && u1[i] <= 'F'){
            dec = u1[i] - 'A' + 10;
        }else{
            res.push_back(u1[i]);
            continue;
        }

        string bin_str = "";
        for(int i = 3; i >= 0; i--){
            if(dec & (1 << i)){
                bin_str.push_back('1');
            }else{
                bin_str.push_back('0');
            }
        }

        reverse(bin_str.begin(), bin_str.end());

        int num = 0;
        for(int i = 0; i < 4; i++){
            num = num * 2 + (bin_str[i] - '0');
        }

        if(num < 10){
            char tmp = num + '0';
            res.push_back(tmp);
        }else{
            char tmp = 'A' + (num - 10);
            res.push_back(tmp);
        }

    }

    cout << res << endl;

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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