要求:第一个数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;
}