C中的自定义文字换行

时间:2018-12-11 19:53:20

标签: c

我正在尝试创建一个函数,该函数接受字符串和一个数字,该数字表示要创建的每一行的宽度。

以下是它接受输入的方式: WrapText(string,20);

此函数应该做的是在每行上最多放置字符串的“宽度”字符(在此示例中为20)。

包装前:

Lorem ipsum dolor坐着,安全管教精英。 Curabitur vitae diam non enim前庭间质。

包装后:

Lorem ipsum dolor

坐着,

保管人

突出精英。

古怪的履带直径

非enim前庭

interdum。


最多只能有20个字符,并且该行必须适合整个单词,而不是在中间切开。

有人可以帮我解决这个问题吗?我尝试了一些东西,但我做对了。

我尝试过的事情:

class Organization(APIView):
    permission_classes = (IsAuthenticated,)
    @method_decorator(csrf_exempt, name='dispatch')
    class OfficeVisitsOverview(APIView):
        def post(self, request, *args, **kwargs):
            cursor = connection.cursor()
            (before, today) = getDateRange()
            cursor.execute("SELECT format(COUNT(*), 'N0') \
                            FROM Medi_OfficeVisit \
                            WHERE ( cast(VisitDate as date) BETWEEN '{0}' AND '{1}' ) \
                    ".format(before, today))
            data = dictfetchall(cursor)
            connection.close()
            return JsonResponse({"numberOfOVs": data[0][""]})

1 个答案:

答案 0 :(得分:0)

在输出任何内容之前,您需要先扫描,阅读每个单词并计算其长度。您可以通过将单词复制到临时缓冲区中来执行此操作,也可以在扫描时使用指针来完成操作。

使用缓冲区很简单,但是由于您不知道要分配多大的缓冲区具有固有的局限性。

指针版本可以作为具有两个状态BETWEEN_WORDS和IN_WORD的简单状态机完成。所有有趣的事情仅在状态转换时发生;扫描单词或空格只是预读。

伪代码:

initial state = BETWEEN_WORDS
start_of_word_ptr = null

for each character,
    if whitespace, then
        if the current state is IN_WORD, then
            the new state is BETWEEN_WORDS
            word_length = current_pos - start_of_word_pos
            if current_line_length + word_length + 1 > max_line_length, then
                /* start a new line */
                print linefeed
                current_line_length = 0
            else
                /* output space */
                print a space between words
                current_line_length++
    else if not whitespace, then
        if the current state is BETWEEN_WORDS, then
            the new state is IN_WORD
            start_of_word_ptr = current_ptr

        /* output word */
        print the characters from start_of_word_pos to current_pos
        current_line_length += word_length

这是一个基本算法,可以完成您想要的字符串输入。自定义口味。