2024-04-24 10:04:14 发布
网友
我是一个初学者,我必须学习Ocaml的科学编程。我只有一个问题: Ocaml中是否有Python的.zfill()方法的等价物来使前导零出现在字符串中?你知道吗
.zfill()
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
你知道吗 我想没有。你知道吗
Printf.printf "%030d" 142857
Printf.printf "%30s" "abcdefg"
前两个选项的工作方式是使用Printf,这也是一个非常有用的方法,您确实应该在某个时候学习。Here是OCaml的文档,但是许多编程语言都有类似的工具。你知道吗
Printf
在%030d中,我们从%d开始,它是一个将被整数替换的占位符(在我们的例子中是142857)。我们将其最小宽度固定为30(默认情况下右对齐),在两个字符之间加30:%30d。最后,我们添加了一个选项,通过在百分号后面添加一个0,使前导字符变为零而不是空格。你知道吗
%030d
%d
%30d
%30s只是至少30个字符的右对齐字符串的占位符(使用前导空格,因为前导零的选项仅适用于数字)。你知道吗
%30s
如果由于某种原因无法在场景中使用精心选择的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是“就地”完成的,而字符串连接不是,因此必须创建一个临时的零字符串。在大多数情况下,这不应该有多大关系,你可以使用任何一个选项。你知道吗
s
blit
OCaml中的字符串是不可变的。这意味着你不应该修改一个字符串,而应该创建一个新的。你知道吗
标准库中没有zfill函数,但您可以通过这种方式轻松创建:
你知道吗 我想没有。你知道吗
Printf.printf "%030d" 142857
。你知道吗Printf.printf "%30s" "abcdefg"
。你知道吗前两个选项的工作方式是使用
Printf
,这也是一个非常有用的方法,您确实应该在某个时候学习。Here是OCaml的文档,但是许多编程语言都有类似的工具。你知道吗在
%030d
中,我们从%d
开始,它是一个将被整数替换的占位符(在我们的例子中是142857)。我们将其最小宽度固定为30(默认情况下右对齐),在两个字符之间加30:%30d
。最后,我们添加了一个选项,通过在百分号后面添加一个0,使前导字符变为零而不是空格。你知道吗%30s
只是至少30个字符的右对齐字符串的占位符(使用前导空格,因为前导零的选项仅适用于数字)。你知道吗如果由于某种原因无法在场景中使用精心选择的Printf格式,那么这里有一个zfill函数:
请注意,如果性能是一个问题(尽管可能不是),这应该比创建一个零字符串然后将其与
s
连接的解决方案执行得更快,因为blit
是“就地”完成的,而字符串连接不是,因此必须创建一个临时的零字符串。在大多数情况下,这不应该有多大关系,你可以使用任何一个选项。你知道吗相关问题 更多 >
编程相关推荐