c - 需要在 C 中自动换行

标签 c word-wrap

嗯,我有简单的家庭作业。我从教师服务器收到文本,需要让它看起来像聊天。有些文字在左侧,有些在右侧。这就是我所做的和工作的。

i = 0;
ratac = 0;

int padding = 1;
while (recvbuf[i] != '\0') {
    if (ratac == 61) {
        padding = 1;
        ratac = 0;
    }

    if (padding) {
        printf("%+60c", recvbuf[i]);
        padding = 0;
    }
    else {
        printf("%c", recvbuf[i]);
    }
    ratac++;
    i++;

};

但我需要添加自动换行,但不知道该怎么做。 (一个词不能在两行上)。知道它看起来像这样

                                       WORD WORD WORD WO
                                       RD WORD WORD WORD

我需要让它看起来像这样

                                   WORD WORD WORD 
                                   WORD WORD WORD
                                   WORD

感谢任何帮助。

最佳答案

写字当然要先确认是否有足够的地方

假设

  • 分隔符只有空格
  • 生成所有分隔符(甚至连续生成或在行首生成)
  • 如果一个单词的长度超过了它不被切割的宽度(azeryuiop 在后面的执行中的情况)

来自您的代码的建议,其中程序在参数中接收左边距、宽度和字符串

#include <stdio.h>

int length(char * p)
{
  char * p2 = p;

  while (*(++p2) && *p2 != ' ')
    ;

  return (int)(p2 - p);
}

int main(int argc, char ** argv)
{
  if (argc != 4) {
    printf("Usage : %s <left margin> <width> <string>\n", *argv);
    return -1;
  }

  int margin, width;

  if ((sscanf(argv[1], "%d", &margin) != 1) || (margin < 0)) {
    fprintf(stderr, "invalid margin\n");
    return -1;
  }
  if ((sscanf(argv[2], "%d", &width) != 1) || (width < 1)) {
    fprintf(stderr, "invalid width\n");
    return -1;
  }

  char *  recvbuf = argv[3];

  int i = 0;
  int ratac = width;

  while (recvbuf[i] != '\0') {
    if (ratac >= width) {
      if (i) 
        putchar('\n');
      for (int j = 0; j != margin; ++j)
        putchar(' ');
      ratac = 0;
    }

    if (recvbuf[i] == ' ') {
      putchar(' ');
      i += 1;
      ratac += 1;
    }
    else {
      int len = length(recvbuf + i);

      if (((ratac + len) <= width) || (ratac == 0)) {
        ratac += len;
        while (len--)
          putchar(recvbuf[i++]);
      }
      else
        ratac = width;
    }
  }
  putchar('\n');
}

编译和执行:

pi@raspberrypi:~ $ gcc -pedantic -Wall -Wextra p.c
pi@raspberrypi:~ $ ./a.out 2 7 "a zer az e r az e aze azeryuiop aze" 
  a zer 
  az e r 
  az e 
  aze 
  azeryuiop
   aze
pi@raspberrypi:~ $ 

关于c - 需要在 C 中自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894235/

相关文章:

c - Rand() 没有正确随机化

html - 如何在 Internet Explorer 的预标记中包装文本?

Cython 相当于 c 定义 #define myfunc(node x,...) SetNode(x.getattributeNode(),__VA_ARGS__)

python - 如何在 `textwrap.fill` 中保留双换行符?

html - URL 自动换行问题

c - 从函数返回 xmlChar 后内存泄漏

c - SBCL存储大图的效率如何?

sublimetext3 - 无法在Sublime Text 3中设置自动换行

c - 在动态分配变量之前初始化变量有什么区别

用于在二进制文件中显示汇编的 C 程序