leetcode 68 模拟

这段代码展示了如何使用C语言实现一个函数,该函数接收一串单词、单词数量、最大宽度作为参数,将单词按指定宽度进行排列,并在单词间填充空格以达到满justify的效果。函数涉及到字符串处理、内存管理和字符数组操作,适用于文本格式化的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不能说写的很烂,只能说写的非常烂

/**
 * 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) 不知道为什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值