我正在尝试创建一个函数,该函数接受字符串和一个数字,该数字表示要创建的每一行的宽度。
以下是它接受输入的方式: 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][""]})
答案 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
这是一个基本算法,可以完成您想要的字符串输入。自定义口味。