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

字符串合并处理

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

int cmp(char *a, char *b){
    return (int)(*a-*b);
}

void sort(char*a,int len)
{
    char odd[100]={0};
    char even[100]={0};
    int x=0,y=0;
    for(int i=0;i<len;i++)
    {
        if(i%2==0)//用下标来计算,应该错开一位
            odd[x++]=a[i];
        else
            even[y++]=a[i];
    }
    qsort(odd,x,sizeof(char),cmp);
    qsort(even,y,sizeof(char),cmp);
    x=y=0;
    for(int i=0;i<len;i++)
    {
        if(i%2==0)
            a[i]=odd[x++];
        else
            a[i]=even[y++];
    }
}

char reverse(int n)
{
    int arr[4]={0};
    for(int i=0;i<4;i++)
    {
        arr[i]=n%2;
        n/=2;
    }
    int num=0;
    char x=0;
    for(int i=0;i<4;i++)
        num+=arr[3-i]*(int)pow(2,i);
    if(num>=0&&num<10)
        x=num+'0';
    else if(num>=10&&num<=15)
        x=num+'A'-10;
    return x;
}

char change(char n)
{
    int num=32;
    if(n>='a'&&n<='f')
        num=10+n-'a';
    else if(n>='A'&&n<='F')
        num=10+n-'A';
    else if(isdigit(n))
        num=n-'0';
    if(num!=32)
        return reverse(num);
    else
        return 1;
}

int main()
{
    char arr[300]={0};
    scanf("%s",arr);
    int len1=strlen(arr);
    scanf("%s",arr+len1);
    int len=strlen(arr);
    sort(arr,len);
    for(int i=0;i<len;i++)
    {
        char n=change(arr[i]);
        if(n!=1)
            arr[i]=n;
    }
    printf("%s",arr);
    return 0;
}

全部评论

相关推荐

07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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