HJ0427分隔输出

要求:第一个数N为字符串的数量,第二个以后为连续输入的字符串。字符串之间用空格隔开。若字符串长度大于等于8,则每八个为一组,之间用空格隔开,切割后余下部分不满八个则用0补位;字符串长度小于8,则后补零,补满八个为止。升序输出。
输入:2 abc 123456789
输出:12345678 90000000 abc00000


思路:
1.将字符串放入N行的二维数组,每个字符串占有一行。
2.获取每一个字符串的长度。
3.然后根据每行的第一个排序。(这个排序似乎理解的不对,是不是应该按字母表顺序排?)
4.通过对列坐标的求余实现每八个一循环,满8(求余结果为0)则补空格,不满8则补零,补到求余结果为0开始。


考试的时候用的一维数组。
还要处理最后一个空格后面的内容。
颇为繁琐。
简直智障。
下次一定。

#include<stdio.h>
#include<string.h>


int N;
int len;
char new[8],store[100][1000] = {0},in[10000],input;
int i=0,j=0,k=0,flag=0;
int length[100];



int max(int a,int b)
{
   return  a>b?a:b;
    
}


int main()
{
    scanf("%d ",&N);
    while(1)//输入数据
    {
        if(input != '\n')
        {
           scanf("%c",&input);
           in[i] = input; 
           i++;
        }
        else
            break;        
    }
    
    for(i=0;i<N;i++)//分组
    {
        for(k =flag;(in[k] != ' ')&&(in[k] != '\n');k++)
        {
            store[i][j] = in[k];
            j++;
            
        }
        j=0;
        k++;//跳过空格
        flag = k;
      
    
    for(i= 0;i<N;i++)//计算每行的长度
    {
        for(j = 0;store[i][j]!=0;j++)
        {
            len++;            
        }       
        length[i] = len; 
        len =0;
    }
    
    
    
    for(i = 0;i < N-1;++i)//排序
    {
        for(j=1;j<N;j++)
        {
            if(store[j-1][0] > store[j][0])
            {
            for(k = 0;k<max(length[j-1],length[j]);k++)
            {
            char asb = store[j-1][k];
                 store[j-1][k] = store[j][k];                 
                 store[j][k] = asb;                 
            }   
                int asb2 = length[j-1];
                    length[j-1] = length[j];
                    length[j] = asb2;
            }
        }
        
        
    }
    
    
      for(i= 0;i<N;i++)//输出
    {
        
        for(j=0;j<length[i];j++)
        {
        new[j%8] = store[i][j];
        if((j%8 == 0)&&(j !=0))
        {
            
            printf(" ");
            
        }
       printf("%c",new[j%8]);
        }
        while(j%8)
        {
            printf("0");
            ++j;
        }
        printf(" ");
        
    }
    
    
    
    
    
    
    
    
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值