什么是“格式化字符串”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是“格式化字符串”?相关的知识,希望对你有一定的参考价值。

什么是“格式化字符串”?

格式化字符串就是按一定格式输出的字符串
举个例子来说,你想输出时间
2006-07-25 21:20:30
这就是一个格式化字符串,它的格式为
yyyy-mm-dd hh:mm:ss

下面再给你一个操作的例子,比如说你要输出时间
FormatDatetime('yyyy-mm-dd hh:mm:ss',Now);
就能够按我上面的格式输出时间了
又比如说你经过计算得到一个结果,你想用一个有格式的字符串输出
例如:计算结果是XXX,那么可以这样写:
Format('计算结果是%d',[result]);

我给出的是delphi代码,如果你用C的,用printf语句也可以实现
printf("计算结果是%d",result);
参考技术A string.format("0:00:1:00",minute,second)
0:00
第一个表示占位符,后面的0表示显示两位,不足补0。
比方说
minute
=
5
格式化出来就变成05了

在 C 中使用舍入和千位分隔符格式化字符串的最有效方法是啥?

【中文标题】在 C 中使用舍入和千位分隔符格式化字符串的最有效方法是啥?【英文标题】:What is the most efficient way to format strings with rounding and thousand separator in C?在 C 中使用舍入和千位分隔符格式化字符串的最有效方法是什么? 【发布时间】:2013-05-08 14:11:32 【问题描述】:

所以我有一个内部循环情况,其中包含浮点和整数值的缓冲区,这些值将被复制到另一个字符串格式的缓冲区。

在格式化字符串时,我有哪些替代方法可以舍入并插入千位分隔符?无论我最终使用哪种方法,它都必须足够灵活以允许不同的格式。另外,因为这是一个内循环场景,所以我想尽可能优化任何解决方案。

看起来locale.h 是一种方法。但在这种情况下,我如何设置自定义语言环境,以及如何实际使用它们?还是有更好的选择?如果这是一个菜鸟问题,请指出正确的方向。

编辑:

这里有几个例子来说明:

1000 给出1,000(如果我想使用, 作为千位分隔符)

1000 给出1 000(如果我想使用space 作为千位分隔符)

1000.123 给出1,000.1(如果我想四舍五入并使用, 作为千位分隔符)

0 给出 ``(如果我想将零显示为空白字符串)

顺便说一句,我在 POSIX 系统上...

【问题讨论】:

C++ 好吗?还是必须是普通的 C 语言? @csd:抱歉,仅限 C... 【参考方案1】:

您可以尝试使用setlocale 设置语言环境,并使用带有' 标志和精度值的printf 进行舍入。这是否可行,取决于您的 C 库。

查看以下程序:

#include <locale.h>
#include <stdio.h>

int main()

    double value = 1234567890.123;

    if (!setlocale(LC_ALL, "en_US.utf8")) 
        fprintf(stderr, "Locale not found.\n");
        return 1;
    

    printf("%'.0f\n", value);
    printf("%'.1f\n", value);

    return 0;

在我的 Ubuntu 系统上,输出是:

1,234,567,890
1,234,567,890.1

【讨论】:

它只是启用当前语言环境的千位分隔符。 是否可以更改分隔符?改用空间 并非如此。您可以尝试找到一个使用空间作为千位分隔符的语言环境。法语语言环境通常使用空格字符,但它使用逗号作为小数分隔符。如果您想要一个可移植的解决方案,您必须编写自己的格式化函数。

以上是关于什么是“格式化字符串”?的主要内容,如果未能解决你的问题,请参考以下文章

C#格式化字符串

Python面试必考重点之字符串与正则表达式第一关——python语言中的四种格式化字符串的方法/什么是模板字符串及如何使用

PWN格式化字符串2——例子

急,如何输出格式化字符串c++/mfc

js 格式化字符串为时间yyyy-MM-dd

python 字符串格式化问题