HJ30 字符串合并处理

本文介绍了一个编程问题,涉及字符串的合并、奇偶位置排序,以及特定字符(0-9,A-F)从十六进制到二进制的转换。示例展示了如何将输入字符串decfab转换为5D37BF的过程。
摘要由CSDN通过智能技术生成

描述

按照指定规则对输入的字符串进行处理。

详细描述:

第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串 "dec" 和字符串 "fab" , 合并后生成的字符串为 "decfab"

第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”,分别对下标为偶数的字符'd'、'c'、'a'和下标为奇数的字符'e'、'f'、'b'进行排序(生成 'a'、'c'、'd' 和 'b' 、'e' 、'f'),再依次分别放回原串中的偶数位和奇数位,新字符串变为“abcedf”

第三步:对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符,需要进行转换操作。

转换规则如下:

对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符(注:字符 a~f 的十六进制对应十进制的10~15,大写同理)。

如字符 '4',其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 '2'。

如字符 ‘7’,其二进制为 0111 ,则翻转后为 1110 ,对应的十进制是14,转换为十六进制的大写字母为 'E'。

如字符 'C',代表的十进制是 12 ,其二进制为 1100 ,则翻转后为 0011,也就是3。转换后的字符是 '3'。

根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"。

数据范围:输入的字符串长度满足1≤n≤100 

输入描述:

样例输入两个字符串,用空格隔开。

输出描述:

输出转化后的结果。

示例1

输入:

dec fab

输出:

5D37BF

示例2

输入:

ab CD

输出:

3B5D

说明:

合并后为abCD,按奇数位和偶数位排序后是CDab(请注意要按ascii码进行排序,所以C在a前面,D在b前面),转换后为3B5D          

示例3

输入:

123 15

输出:

88C4A

#include<cstdio>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;

bool compare(char left,char right) // 按照ASCII码排序
{
    // 不交换的情况,返回true
    if(left-'0' < right-'0')
        return true;
    else 
        return false;
}
map<char,int> myMap1={
    {'0',0},{'1',1},{'2',2},{'3',3},
    {'4',4},{'5',5},{'6',6},{'7',7},
    {'8',8},{'9',9},
    {'a',10},{'A',10},
    {'b',11},{'B',11},
    {'c',12},{'C',12},
    {'d',13},{'D',13},
    {'e',14},{'E',14},
    {'f',15},{'F',15}
};

map<int,char> myMap2={
    {0,'0'},{1,'1'},{2,'2'},{3,'3'},
    {4,'4'},{5,'5'},{6,'6'},{7,'7'},
    {8,'8'},{9,'9'},
    {10,'A'},
    {11,'B'},
    {12,'C'},
    {13,'D'},
    {14,'E'},
    {15,'F'}
};
// 转换:都看作十六进制字符 --> 十进制 --> 二进制逆序 --> 十进制--> 十六进制字符
char transf(char c)
{
    // 十六进制字符 --> 十进制数字
    int num=myMap1[c];
    
    // 十进制数字 --> 二进制逆序
    vector<int> binary; //逆序二进制
    while (num) {
        binary.push_back(num%2);
        num/=2;
    }
    // 如果二进制数不足4位要补0
    while (binary.size()<4) {
        binary.push_back(0);
    }
    // 二进制逆序 --> 十进制数
    int result=0;
    int r=1;
    for(int i=binary.size()-1;i>=0;i--)
    {
        result+=binary[i]*r;
        r*=2;
    }
    // 十进制数 --> 十六进制字符
    return myMap2[result];
}  
int main()
{
    // 0.输入
    char buf1[200];
    char buf2[200];
    scanf("%s",buf1);
    scanf("%s",buf2);
    string str1=buf1;
    string str2=buf2;
    
    // 1.合并
    string arr;
    for(int i=0;i<str1.size();i++)
    {
        arr.push_back(str1[i]);
    }
    for(int i=0;i<str2.size();i++)
    {
        arr.push_back(str2[i]);
    }
    // 2.分别得到奇数下标的数组和偶数下标的数组
    char arr1[200];
    char arr2[200];
    int l1=0;
    int l2=0;
    for(int i=0;i<arr.size();i++)
    {
        if(i%2==0)
        {
            arr2[l2]=arr[i];
            l2++;
        }
        else {
            arr1[l1]=arr[i];
            l1++;
        }
    }
    // 3.分别排序
    sort(arr1,arr1+l1,compare);
    sort(arr2,arr2+l2,compare);
    // 4.合并
    char answer[400];
    int t1=0;
    int t2=0;
    for(int i=0;i<l1+l2;i++)
    {
        if(i%2==0)
            answer[i]=arr2[t2++];
        else
            answer[i]=arr1[t1++];
    }
    // 5.转换并输出
    for(int i=0;i<l1+l2;i++)
    {
        /*
        只对字符0~9、a~f、A~F进行转换,其他直接输出
        */
        if(answer[i]>='0' && answer[i]<='9' || answer[i]>='a' && answer[i]<='f' || answer[i]>='A' && answer[i]<='F')
        {
            printf("%c",transf(answer[i]));
        }
        else
        {
            printf("%c",answer[i]);
        }
    }
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值