该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
layndown=(char **)malloc(sizeof(char*)*(lenth));
//line为读取的待处理数组,out为最终的处理结果
//数组a为记录主体处理部分while循环生成的每个layndown数组的元素个数
//动态数组b为layndown处理过程中的待判断动态字符快(是否为layndown)。layndown则为所记录的最长的layndown字符快
//
whilenum=0;cmp=0;c=1;reservei=0;
linenum=0;
//该while与for的嵌套动态循环完成了最长layndown模块的寻找
//实际上就是while完成待处理字符的逐个移动,linenum则是该移动的指针,for循环则是从该字符开始向后遍历,判断是否linenum与i之间
//的字符快是否为layndown word,并记录下最长的长度。在下一次while循环中则不需要再在layndown word中间移动了,直接从最长的layndown word
//后面开始
while(linenum
for(int i=linenum;i
free(b);
b=(char **)malloc(sizeof(char*)*(i+1-linenum));//申请二维动态数组,因为要对待处理快进行循环移位,拓展成二维,以进行layndown的判断
for(int j=0;j
b[j]=(char *)malloc(sizeof(char)*(i+1-linenum));
}
copy1(b[0],line,linenum,i+1); //将待处理的块拷贝入b数组中准备处理
movechar(b[0],i+1-linenum,b); //拓展成为二维
cmp=0;
c=0;
while(cmp==0&&c
if(strncmp(b[0],b[c],i+1-linenum)>0){
cmp=1;
}
c++;
}
if(cmp==0) //仅仅记录下layndown word的长度,因为他是不断覆盖的,最终记录的就是最长的。。。
reservei=i;
}
//接下来的一小段代码则是完成将每次for循环中生成的最长layndown word读取出来,储存在layndown word中,数组a中则是其长度的储存
//其中whilenum是while循环次数的记录
r=(char *)malloc(sizeof(char)*(reservei+1-linenum));
copy1(r,b[0],0,reservei+1-linenum);
a[whilenum]=reservei+1-linenum;
layndown[whilenum]=(char *)malloc(sizeof(char)*(reservei+1-linenum));
copy1(layndown[whilenum],r,0,reservei+1-linenum);
whilenum++;
linenum=reservei+1;
free(r);
}
free(b);
//下面则是对生成的layndown word分别进行循环移位的拓展,并将其进一步拓展为lenth*lenth的二维数组,并进行排序,生成输出。
int sum=0;
char end[lenth][lenth]; //输出之前的二维数组都将保存在end中
//int resa[lenth]; //记录下end中每一行的实际长度(拓展为lenth*lenth的二维数组之前的长度)
for(int cend=0;cend
for(int cend1=0;cend1
end[cend][cend1]=0;
}
}
for(int endnum=0;endnum
rr=(char **)malloc(sizeof(char*)*(a[endnum]));
for(int rrn=0;rrn
rr[rrn]=(char *)malloc(sizeof(char)*(a[endnum]));
}
movechar(layndown[endnum],a[endnum],rr); //每一个layndown word的循环移位
//free(layndown);
int rri=0;
//对应的长度记录也要拓展
for(int toend=sum;toend
copy1(end[toend],rr[rri],0,a[endnum]);
resa[toend]=a[endnum];
rri++;
}
sum=sum+a[endnum];
free(rr);
}
free(layndown);
//倒数第二步的lenth*lenth的拓展
for(int stend=0;stend
int mv=resa[stend];
int add=0;
for(;mv
end[stend][mv]=end[stend][add];
add++;
}
}
qsort(end,resa,0,lenth-1); //排序
comout(end,out,lenth); //生成输出数组
//putline(out,lenth);
long pos_file = ftell(read);//ftell函数返回stream流的当前文件位置
fseek(read,pos_file - lenth, SEEK_SET);//重新设置流stream的文件位置,将位置设置在需要写入数据的地方
fwrite(out,sizeof(char),lenth,read);
pos_file = ftell(read);
fseek(read,pos_file,SEEK_SET);//重新设置位置,使得fgets函数从正确位置开始读
}
fclose(read);
printf("算法结束\n");
end=clock();
cout<
return 0;
}