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

字符串合并处理

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

#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*
 *1、使用变长数组,注意,声明变长数组的变量值一旦确定将不能改变
 *2、十六进制数转换时使用了一个映射数组,由于十六进制数数目有限,映射数组效率更高
 */
int main() {
    int len,index;
    char a[101]={0},b[101]={0},tmp;
    char reverse[16]={'0','8','4','C','2','A','6','E','1','9','5','D','3','B','7','F'};
    while (scanf("%s %s", a, b) != EOF) {
        len=strlen(a)+strlen(b);
        char input[len];
        memset(input,0,len+1);
        memcpy(input,a,strlen(a));
        memcpy(&input[strlen(a)],b,strlen(b));
        for(int i=0;i<len;i=i+2)
        {
            index=i;
            for(int j=i+2;j<len;j=j+2)
            {
                if(input[index]>input[j])
                {
                    index=j;
                }
            }
            tmp=input[index];
            input[index]=input[i];
            input[i]=tmp;
        }
        for(int i=1;i<len;i=i+2)
        {
            index=i;
            for(int j=i+2;j<len;j=j+2)
            {
                if(input[index]>input[j])
                {
                    index=j;
                }
            }
            tmp=input[index];
            input[index]=input[i];
            input[i]=tmp;
        }
        for(int i=0;i<len;i++)
        {
            if(input[i]>='0'&&input[i]<='9')
            {
                input[i]=reverse[input[i]-'0'];
            }
            else if(input[i]>='a'&&input[i]<='f')
            {
                input[i]=reverse[input[i]-'a'+10];
            }
            else if(input[i]>='A'&&input[i]<='F')
            {
                input[i]=reverse[input[i]-'A'+10];
            }
        }
        printf("%s",input);
    }
    return 0;
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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