【华为笔试】大端小端两种字节排序,输入编码组个数以及编码内容,解析字符串

现定义一种字符编码,编码格式为:

9个字符为一组,第一个字符为0时代表小端排序,第一个字节为1时,代表大端排序。

例如:012345678为小端排序,解析为87654321

112345678代表大端排序,解析为12345678

采用C语言编程:

#include<stdio.h>
int main(){
    int n=0;
    scanf("%d",&n);
    char a[128];
    scanf("%s",a);
    int i=0;
    for(i=0;i<n;i++){
        if(a[9*i]=='0'){
            for(int j=8;j>0;j--){
                printf("%c",a[9*i+j]);
            }
        }
        if(a[9*i]=='1'){
            for(int k=1;k<9;k++){
                printf("%c",a[9*i+k]);
            }
        }
        if(!(i==n-1))
            printf(" ");
    }
    return 0;
}

运行结果:

【华为笔试】大端小端两种字节排序,输入编码组个数以及编码内容,解析字符串

核心思想解释:

作为一种节约内存的算法,不应额外申请内存空间,直接在需要输入的数组的基础上进行输出。

将a分为n组,然后判断每组第一个字符,进而判断为大端还是小端,最后针对两种不同方式进行不同的输出。

最后,因为最后一个空格无需输出,所以在输出空格之前进行判断。