使用sprintf打印字符串值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sprintf打印字符串值相关的知识,希望对你有一定的参考价值。

实际上,我在Gnuplot中遇到了这个问题。但是以一种简单的方式,问题是我想使用sprintf以字符串格式打印,即使该字符串由数字和符号组成。像这样:

a = '12/7'

sprintf('%.f', a)

我可以在Gnuplot中运行它,但它只显示符号“/”之前的数字。我希望输出应该打印变量a的所有内容,即'12 / 7'。对此案有何建议?

答案

如果你指的是sprintf中的gnuplot内置函数,那么文档help sprintf说:

sprintf("format",var1,var2,...)将标准C语言格式说明符应用于多个参数并返回结果字符串。如果你想使用gnuplot自己的格式说明符,你必须改为调用gprintf()。有关sprintf格式说明符的信息,请参阅标准C语言文档或unix sprintf手册页。

%f的Unix手册页中说(截断):

%f,%F - 双参数被舍入并在样式[ - ] ddd.ddd中转换为十进制表示法,其中小数点字符后面的位数等于精度规范。

因此,您需要使用不同的格式说明符。正如fedorqui指出的那样,适当的格式说明符是%s

我经常引用the table in this link查找相应的格式说明符(我发现C手册页有点长)。

使用sprintf和文件中的字符串

为了使用sprintf格式化文件中的字符串,您需要在文件中指定列以从中提取字符串信息。这需要使用stringcolumn命令而不是仅使用$符号来完成。

例如,如果要包含文件中的数字,可以使用如下命令:

plot "data.dat" using 1:2:(sprintf('%f', $3)) with labels

但是对于你需要的字符串:

plot "data.dat" using 1:2:(sprintf('%s', stringcolumn(3))) with labels
另一答案

当你说

$ awk 'BEGIN {a="12/7"; printf "%.f", a}'
12

你得到数字的int部分,因为通过在f中使用printf标志,你将它转换为数字而不是字符串。所以它相当于说:

awk 'BEGIN {a="12/7"; a=int(a); print a}'

如果你想保留所有这些,请使用%s作为字符串:

$ awk 'BEGIN {printf "%s", "234-456"}'
234-456

以上是关于使用sprintf打印字符串值的主要内容,如果未能解决你的问题,请参考以下文章

字符串标记符R“( )“以及sprintf_P打印

Arduino 浮点数转字符数组输出,π常量输出,sprintf打印

sprintf函数的用法

sprintf()函数的用法

使用 sprintf 打印换行符 - 有光泽

关于sprintf()