string-formatting - 将文字空格字符添加到图中的数字输出

标签 string-formatting forth

经过大约几个小时的反复试验,我不知道该怎么做...这是我正在编写的代码:

: format
    ( n ds -- )
    >r            cr .s
    dup              cr .s
    >r               cr .s
    abs              cr .s
    s>d              cr .s
    <# [char] bl hold #s r> sign #> cr .s
    r@               cr .s
    dup              cr .s
    c@               cr .s
    dup >r           cr .s
    chars +          cr .s
    char+            cr .s
    swap             cr .s 
    dup              cr .s
    >r               cr .s
    cmove            cr .s
    r> r> +          cr .s
    r>               cr .s
    c!
;

顺便说一句...是否有更简单的方法来打印输出,类似于 printf 的东西会很棒。另一种可能性是将空格字符指定为 s"" 类型字符串的第一个字符。

编辑:

我发现我可以在 Gforth 中执行:s\"\040 test" (尽管手册说这不是标准的)。和 s\"\x20 test" 这可能是标准的,但我不太明白句子中表示它是否标准的部分在哪里相关。不过,我很高兴知道如何将其与图中的数字输出结合起来。

编辑2

这就是我期望的使用方式:

create test 256 allot
s" prefix " test place
123 test format
s" suffix" test place+
test count type \ prefix 123 suffix

最佳答案

我认为对于这个示例,您不需要在 <# #> 中添加空格东西。您可以使用 s" 定义带有前导空格或尾随空格的字符串。 .

所以如果你开始

\ Push addresses and lengths for the prefix and the number
s" prefix "         \                             -- addr  u
123 s>d <# #s #>    \                      addr u -- addr u addr2 u2

您想要的单词是将它们连接起来,例如:

: concatenate
    \ Moves the string addr2 u2 to the end of the string addr u
    >r >r                \        addr u addr2 u2 -- addr u
    dup >r over r> + r>  \                 addr u -- addr u addr+u addr2
    swap r@              \                 addr u -- addr u addr2 addr+u u2
    cmove r> + ;         \ addr u addr2 addr+u u2 -- addr u+u2

因此,如果您调用此函数并输出结果字符串,如下所示:

concatenate type

输出将为“前缀 123”

然后,您可以将相同的单词应用于字符串“前缀 123”和“后缀”。

这并不使用与您的示例完全相同的内存位置,但它可以进行调整,这只是我演示它的最简单的方法。


针对评论,您似乎非常接近在图片输出中嵌入字符,我认为您只需要删除 [char]例如

123 s>d <# # bl hold # bl hold # #>

应该生成一个类似“1 2 3”的字符串

关于string-formatting - 将文字空格字符添加到图中的数字输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243117/

相关文章:

c# - 在 FormattableString 和 (str, params object[]) 之间转换

sockets - 如何使用 Forth 发送 GET/POST 请求

c# - 如何将小时、分钟和秒从字符串解析为 TimeSpan 对象?

c++ - 在填充十六进制和一些转换方面需要帮助

compilation - 在编译字中编译匿名字

forth - 从 Forth 的堆栈中获取第 n 个元素

macos - macOS v10.15 (Catalina)/x64 上的自修改代码

forth - AND Forth 中的 'tick' 发生了什么?

datetime - Neo4j 在不使用 apoc 插件的情况下将 timestamp() 纪元格式化为日期时间

java - SimpleDateFormat 宽容导致意外行为