OCam中的Python“zfill()”等价物

2024-04-24 10:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个初学者,我必须学习Ocaml的科学编程。我只有一个问题: Ocaml中是否有Python的.zfill()方法的等价物来使前导零出现在字符串中?你知道吗


Tags: 方法字符串编程科学初学者前导ocamlzfill
2条回答

OCaml中的字符串是不可变的。这意味着你不应该修改一个字符串,而应该创建一个新的。你知道吗

标准库中没有zfill函数,但您可以通过这种方式轻松创建:

let zfill s width =
  let to_fill = width - (String.length s) in
  if to_fill <= 0 then s
  else (String.make to_fill '0') ^ s

你知道吗 我想没有。你知道吗

  • 当您处理数字时,可以使用内置函数轻松地完成此操作。例如,要打印前导0超过30个字符的数字142857,请使用Printf.printf "%030d" 142857。你知道吗
  • 如果你能很好地使用前导空格而不是前导零,你也可以让它在字符串中工作。例如,Printf.printf "%30s" "abcdefg"。你知道吗
  • 最后,如果有必要,您可以定义自己的函数。你知道吗

前两个选项的工作方式是使用Printf,这也是一个非常有用的方法,您确实应该在某个时候学习。Here是OCaml的文档,但是许多编程语言都有类似的工具。你知道吗

%030d中,我们从%d开始,它是一个将被整数替换的占位符(在我们的例子中是142857)。我们将其最小宽度固定为30(默认情况下右对齐),在两个字符之间加30:%30d。最后,我们添加了一个选项,通过在百分号后面添加一个0,使前导字符变为零而不是空格。你知道吗

%30s只是至少30个字符的右对齐字符串的占位符(使用前导空格,因为前导零的选项仅适用于数字)。你知道吗


如果由于某种原因无法在场景中使用精心选择的Printf格式,那么这里有一个zfill函数:

let zfill n s =
  let length = Bytes.length s in
  if n <= length then
    s
  else
    let result = Bytes.make n '0' in
    Bytes.blit s 0 result (n-length) length;
    result
;;

请注意,如果性能是一个问题(尽管可能不是),这应该比创建一个零字符串然后将其与s连接的解决方案执行得更快,因为blit是“就地”完成的,而字符串连接不是,因此必须创建一个临时的零字符串。在大多数情况下,这不应该有多大关系,你可以使用任何一个选项。你知道吗

相关问题 更多 >