华为2019笔试--连续输入字符串拆分后排序(c语言版)

/*
华为在线编程题目:连续输入字符串(个数为N,长度不大于100,字符串间按空格分隔),请按长度为8拆分每个字符串
后输出到新的字符串数组,输出的字符串按升序排列。长度不足8补0;

例如:
输入:2 abc 123456789
输出:12345678 90000000 abc00000

解题思路:1.init_str:读取输入数据,保存,并估计拆分后字符串个数;
          2.get_str: 得到拆分后字符串
          3.sort_str: 排序
          4.print_str: 输出排序后字符串
注意:
*/
#include
#include
#include

int init_str(int N, char str[][100]); // 读取并保存字符串,估计拆分后字符串个数
void get_str(int N, char str[][100], char str1[][9]); // 得到拆分后字符串
void sort_str(int total_num, char str1[][9]); //排序
void print_str(int num, char str[][9]); //输出

int main()
{
    int N;
    scanf("%d", &N);
    char str[N][100];
    int total_num ;
    total_num = init_str(N, str);
    char str1[total_num][9];
    get_str(N, str, str1);
    sort_str(total_num, str1);
    print_str(total_num, str1);
    system("pause");
    return 0;
}

/* input: N = num of input str
 *        str = str array
 * output: num of split str */
int init_str(int N, char str[][100])
{
    int i;
    int len;
    int num;
    int total_num = 0;
    for(i=0; i     {
        scanf("%s", str[i]);
        len = strlen(str[i]);
        if((len%8)==0)
        {
            num = len/8;
        }
        else
        {
            num = len/8+1;
        }
        total_num += num;
    }
    return total_num;
}

/* input: num = num of print str
 *        str = str array*/
void print_str(int num, char str[][9])
{
    int i;
    for(i=0; i     {
        printf("%s\n", str[i]);
    }
}

/* input: str = str array before split
 *        str1 = str array after split
 *        N = num of input array*/
void get_str(int N, char str[][100], char str1[][9])
{
    int ind = 0;
    int i,k;
    int len;
    for(i=0; i     {
        len = strlen(str[i]);
        for(k=0; k         {
            str1[ind][k%8] = str[i][k];
            if((k+1)%8==0)
            {
                str1[ind][8] = '\0';
                ind++;
            }
        }
        if(len%8!=0)
        {
            for(k=len%8; k<8; ++k)
            {
                str1[ind][k] = '0';
            }
            str1[ind][k] = '\0';
        }
        ind++;
    }

}

/* input: str1 = str array after split
 *        total_num = num of sorted array*/
void sort_str(int total_num, char str1[][9])
{
    int i,j;
    char temp[9] = {'0'};
    for(i=0; i     {
        for(j=i+1; j         {
            if(strcmp(str1[i],str1[j])>0)
            {
//                for(k=0; k<8; ++k)  // pix to pix
//                {
//                    temp = str1[i][k];
//                    str1[i][k] = str1[j][k];
//                    str1[j][k] = temp;
//                }
                strcpy(temp,str1[i]);  // temp must init firstly(then copy), char *temp = NULL is wrong.
                strcpy(str1[i],str1[j]);
                strcpy(str1[j],temp);
            }
        }
    }
}
 

你可能感兴趣的:(C,拆分,排序,字符串,c语言版)