不能说写的很烂,只能说写的非常烂
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** fullJustify(char ** words, int wordsSize, int maxWidth, int* returnSize){
char** ans=(char**)malloc(wordsSize*sizeof(char*));
int index=0;
*returnSize=0;
int t=0;
int begin=0;
int end;
int cnt;
for(int i=0;i<wordsSize;i++)
{
if(t)
t++;
t+=strlen(words[i]);
if(t>maxWidth)
{
t=t-strlen(words[i]);
t--;
i--;
end=i;
cnt=end-begin+1;
t-=(cnt-1);
ans[index]=(char*)malloc(sizeof(char)*(maxWidth+10));
memset(ans[index],0,sizeof(ans[index]));
double remain=maxWidth-t;
for(int k=begin;k<=end;k++)
{
if(k>begin)
{
int temp=(int)ceil(remain/(cnt-1));
for(int i=0;i<temp;i++)
{
strcat(ans[index]," ");
}
remain-=temp;
cnt--;
}
strcat(ans[index],words[k]);
}
if(remain>0)
{
for(int i=0;i<remain;i++)
{
strcat(ans[index]," ");
}
remain=0;
}
index++;
begin=i+1;
t=0;
}
}
if(t>0)
end=wordsSize-1;
ans[index]=(char*)malloc(sizeof(char)*(maxWidth+10));
memset(ans[index],0,sizeof(ans[index]));
for(int k=begin;k<=end;k++)
{
if(k>begin)
strcat(ans[index]," ");
strcat(ans[index],words[k]);
}
for(int i=strlen(ans[index]);i<maxWidth;i++)
{
strcat(ans[index]," ");
}
index++;
*returnSize=index;
return ans;
}
malloc的时候分配空间过小 memset会报错(maxWidth+1 maxWidth+5) 不知道为什么