题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f?tpId=37&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37

/*
思路: 分三个步骤处理
    1. 把字符串拼接起来
    2. 借助两个vector<int>,对合并后的字符串排序
    3. 利用密码对照表实现字符转换 注意使用函数 str.find_last_of()
*/
#include <algorithm>
#include <cctype>
#include <iostream>
#include <vector>
using namespace std;

void mysort(string& str) {
    vector<char> v1, v2;
    int len = str.length();
    for (int i = 0; i < len; ++i) {
        if (i % 2) {
            v1.push_back(str[i]);
        } else {
            v2.push_back(str[i]);
        }
    }

    sort(v1.begin(), v1.end());
    sort(v2.begin(), v2.end());

    for (int i = 0, i1 = 0, i2 = 0; i < len; ++i) {
        if (i % 2) {
            str[i] = v1[i1];
            i1++;
        } else {
            str[i] = v2[i2];
            i2++;
        }
    }

}

string a("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
string b("084c2a6e195d3b7fghijklmnopqrstuvwxyz5d3b7fGHIJKLMNOPQRSTUVWXYZ");

void myconvert(string& str) {
    int len = str.length();
    for (int i = 0; i < len; ++i) {
        // 只对字母和数字进行处理。
        if ( isalpha(str[i]) || isdigit(str[i]) ){
            str[i] = b[a.find_last_of(str[i])];
            if ( islower(str[i]) && str[i] <= 'f') {
                str[i] = toupper(str[i]);
            }
        }

    }
    return;
}

int main() {
    string str1, str2;
    cin >> str1 >> str2;

    // 1. 合并两个字符串
    string str = str1 + str2;

    // 2. 按奇数位与偶数位排序
    mysort(str);

    // 3. 对排序后的字符进行转换
    myconvert(str);

    cout << str << endl;
}
// 64 位输出请用 printf("%lld")

全部评论
点赞 回复 分享
发布于 2024-10-10 08:56 浙江

相关推荐

2025-12-11 14:24
门头沟学院 Java
在debug的伊泽瑞...:我说怎么这么眼熟查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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