将数据格式化为字符串或字符向量
格式化数组中的数据str
= sprintf (formatSpec
,A1,…,一个
)A1,…,一个
属性指定的格式化操作符formatSpec
并返回结果文本str
.的sprintf
中的值的格式A1,…,一个
按列排序。如果formatSpec
是字符串,那么输出也是这样吗str
.否则,str
是一个字符向量。
若要以字符串数组或字符向量单元格数组的形式返回多个格式化文本,请使用组成
函数。
[
当操作不成功时,以字符向量的形式返回错误消息。否则,str
,errmsg
= sprintf(formatSpec
,A1,…,一个
)errmsg
是空的。
转换转义字符序列str
= sprintf (literalText
)literalText
,例如\ n
而且\ t
.它将返回所有其他未更改的字符。如果literalText
包含格式化操作符(例如% f
),然后str
丢弃它和之后的所有字符。
使用格式化浮点数% e
,% f
,% g
说明符。
A = 1/eps;Str_e = sprintf(' % 0.5 e”,)
Str_e = '4.50360e+15'
Str_f = sprintf(' % 0.5 f ',)
Str_f = '4503599627370496.00000'
Str_g = sprintf(% 0.5克的,)
Str_g = '4.5036e+15'
将文字文本与数组值结合以创建字符向量。
formatSpec ='数组是%dx%d。';A1 = 2;A2 = 3;str = sprintf(formatSpec,A1,A2)
str = '数组是2x3.'
若要以字符串形式返回格式化文本,请指定formatSpec
方法时,作为字符串而不是字符向量sprintf
函数。
从R2017a开始,您可以使用双引号创建字符串。转换数据并以字符串形式返回结果。
formatSpec ="当前时间为:%d:%d %s";A1 = 11;A2 = 20;A3 =“点”。;str = sprintf(formatSpec,A1,A2,A3)
str = "当前时间为上午11:20。"
转换输入字符串。包含文本的输入数组可以是字符向量或字符串。
A1 = 2;A2 = 35;A3 =“点”。;str = sprintf(formatSpec,A1,A2,A3)
str = "当前时间是:下午2:35。"
指定打印值的最小宽度。
STR = sprintf(“% 025 d”[123456])
STR = '0000000000000000000123456'
的0
标志。% 025 d
格式说明符要求在输出中输入前导零。
方法重新排序输入值n美元
位置标识符。
A1 =“X”;A2 =“Y”;A3 =“Z”;formatSpec =' %3$s %2$s %1$s';str = sprintf(formatSpec,A1,A2,A3)
str = ' Z Y X'
C = {1,2,3;“AA”,“BB”,“CC”};STR = sprintf(' %d %s'C {:})
str = ' 1 AA 2 BB 3 CC'
的语法C {:}
创建一个逗号分隔的数组列表,其中包含每个单元格的内容C
按列排序。例如,C {1} = = 1
而且C{2} = =“AA”
.
formatSpec
- - - - - -输出字段的格式输出字段的格式,使用格式化操作符指定。formatSpec
也可以包括普通文本和特殊字符。
如果formatSpec
包括表示转义字符的文本,例如\ n
,然后sprintf
翻译转义字符。
formatSpec
可以是单引号中的字符向量,或者从R2016b开始的字符串标量。
格式化操作符
格式化操作符以百分号开头,% gydF4y2Ba
,并以转换字符结束。转换字符是必需的。还可以指定标识符、标志、字段宽度、精度和之间的子类型操作符% gydF4y2Ba
以及转换字符。(操作符之间的空格无效,此处仅为可读性起见)。
转换字符
此表显示将数字和字符数据格式化为文本的转换字符。
值类型 | 转换 | 细节 |
---|---|---|
整数,签署了 |
|
以10为底的 |
整数,无符号 |
|
以10为底的 |
|
8进制(八进制) |
|
|
以16为基数(十六进制),小写字母 |
|
|
一样 |
|
浮点数 |
|
定点记数法(使用精确运算符指定小数点后的位数。) |
|
指数符号,例如 |
|
|
一样 |
|
|
更紧凑的 |
|
|
更紧凑的 |
|
字符或字符串 |
|
单个字符 |
|
字符向量或字符串数组。的类型与输出文本的类型相同 |
可选的运营商
可选标识符、标志、字段宽度、精度和子类型操作符进一步定义了输出文本的格式。
标识符
处理函数输入参数的顺序。使用语法
,在那里n
$n
表示函数调用中其他输入参数的位置。
例子:('%3$s %2$s %1$s %2$s','A','B','C')
打印输入参数“一个”
,“B”
,“C”
如下:b选项b。
.
注意:如果输入参数是数组,则不能使用标识符从该输入参数指定特定数组元素。
旗帜
|
对齐。 |
|
对于任何数值,总是打印一个符号字符(+或-)。 |
|
在值之前插入一个空格。 |
|
填充到字段宽度,值前为零。 |
|
修改选定的数值转换:
例子: |
字段宽度
打印的最小字符数。字段宽度操作符可以是数字或星号(*
)来引用输入参数。
当你指定*
作为字段宽度操作符,其他输入参数必须同时提供宽度和要打印的值。宽度和值可以是参数对,也可以是数值数组中的参数对。与*
作为字段宽度操作符,您可以使用不同的宽度打印不同的值。
例子:输入参数(intmax ' % 12 d ')
都相当于(' % * d ', 12日intmax)
.
例子:输入参数('%*d',[2 10 5 100])
返回“100”
,有两个名额供10
还有五个位置One hundred.
.作为一种替代方法,您还可以将字段宽度和值指定为多个参数,如(' % * d ', 2, 10, 5100)
.
除非flags另有指定,否则函数将在值前用空格填充字段宽度。
精度
为 |
小数点右边的位数 |
为 |
有效位数 |
精确运算符可以是数字,也可以是星号(*
)指一个论点。
当你指定*
作为字段精度操作符,其他输入参数必须同时提供精度和要打印的值。精度和值可以是参数对,也可以是数值数组中的参数对。与*
作为精度操作符,您可以将不同的值打印到不同的精度。
当你指定* . *
作为字段宽度和精度操作符,必须以三元组的形式指定字段宽度、精度和值。
例子:输入参数(' % .4f ',π)
都相当于(' %。* f ' 4π)
.
例子:输入参数(% 6.4 f,π)
都相当于(' % *。* f ', 6日4π)
.
例子:输入参数(' % *。* f ', 6日4π,9日,6日,exp (1))
返回3.1416 - 2.718282的
,9
而且6
作为场的宽度和精度的输出实验(1)
.
请注意
如果为浮点值指定的精度操作符超过输入数值数据类型的精度,则结果可能与输入值的精度不匹配。结果取决于您的计算机硬件和操作系统。
子类型
可以使用子类型操作符将浮点值打印为其八进制、十进制或十六进制值。子类型操作符紧接在转换字符的前面。下表显示了可以使用子类型的转换。
输入值类型 |
子类型和转换字符 |
输出值类型 |
---|---|---|
浮点数 |
|
双精度十六进制、八进制或十进制值 |
|
单精度十六进制、八进制或十进制值 |
格式化操作符之前或之后的文本
formatSpec
还可以在百分号之前包含额外的文本,% gydF4y2Ba
,或转换字符后。文本可以是:
普通文字打印。
不能作为普通文本输入的特殊字符。此表显示了如何在中表示特殊字符formatSpec
.
特殊字符 |
表示 |
---|---|
单引号 |
|
百分比的性格 |
|
反斜杠 |
|
报警 |
|
退格 |
|
换页 |
|
新行 |
|
回车 |
|
水平选项卡 |
|
垂直制表符 |
|
Unicode字符®数值可以用十六进制数表示, |
例子: |
Unicode数值可以用八进制数表示的字符。 |
例子: |
格式化操作符转换的显著行为
数值转换只输出复数的实分量。
如果指定的转换不适合数据,例如数值的文本转换,请使用MATLAB®重写指定的转换,并使用% e
.
例子:' % s '
转换π
来3.141593 e + 00
.
如果应用文本转换(或% c
或% s
)转换为整数值,MATLAB将对应于有效字符代码的值转换为字符。
例子:' % s '
转换[65 66 67]
来美国广播公司
.
A1,…,一个
- - - - - -数字、字符或字符串数组数字、字符或字符串数组。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|逻辑
|字符
|字符串
literalText
- - - - - -输入文本时不使用格式化操作符输入没有格式化操作符的文本,指定为字符向量或字符串标量。sprintf
翻译任何转义字符序列literalText
.
数据类型:字符
|字符串
str
-格式化文本格式化的文本,作为字符向量或字符串标量返回。的类型匹配输出的类型formatSpec
.
errmsg
-错误信息当操作不成功时,作为字符向量返回的错误消息。否则,errmsg
是空的。
的sprintf
函数类似于流
,但流
打印到文件或命令窗口。
读取函数的格式说明符sscanf
而且fscanf
不同于书写功能的格式sprintf
而且流
.读取函数不支持精度字段。金宝appwidth字段指定写入的最小值,但读取的最大值。
如果指定了无效的格式化操作符或特殊字符,则sprintf
打印到无效操作符或字符之前的所有文本,并丢弃其余文本。
例子:如果formatSpec
是'value = %z'
,然后sprintf
打印“价值= '
因为% z
不是格式化操作符。
例子:如果formatSpec
是'字符\x99999 = %s'
,然后sprintf
打印“性格”
因为\ x99999
不是有效的特殊字符。
[1]克尼根,B. W.和D. M.里奇,C语言,第二版,Prentice-Hall, Inc., 1988。
[2] ANSI规范X3.159-1989:“编程语言C,”ANSI, 1430 Broadway, New York, NY 10018。
使用注意事项和限制:
的formatSpec
参数必须为常数。
在formatSpec
,十六进制数的取值范围为[0 7F],八进制数的取值范围为[0 177]。
如果所有输入数组都是常量,则代码生成器计算sprintf
在MATLAB编译时调用。在这种情况下,代码生成限制为sprintf
不适用和行为sprintf
在生成的代码中的行为与MATLAB中的行为相同。
如果不可能进行外部调用,代码生成器将生成用于的C代码sprintf
.当外部调用被禁用或当sprintf
在parfor
循环。
的行为sprintf
在生成的代码中匹配C编译器的行为,而不是MATLAB的行为:
格式说明符有相应的C格式说明符,例如,% e
或% E
.
的sprintf
调用是在parfor
循环。
外部调用被禁用。
不支持以下选项和功能:金宝app
的n美元
用于重新排序输入值的位置标识符
打印数组
使用子类型将浮点数打印为其八进制、十进制或十六进制值
当你打电话时sprintf
格式说明符% s
,则不能在输入字符向量的中间放置空字符。要写入空字符,使用Sprintf (fid, '%c', char(0))
.
输入参数类型必须匹配它们的格式类型。例如,如果n
是double,代码生成不允许以下代码:
STR = sprintf(' % d ', n)
对于代码生成,首先强制转换n
到有符号整数类型,例如int8
.
STR = sprintf(' % d 'int8 (n))
当你打电话时sprintf
对于整数格式说明符,整数参数的类型必须是目标硬件可以表示为本机C类型的类型。例如,如果你打电话sprintf (% d, int64 (n))
,则目标硬件必须具有支持64位整数的本机C类型。金宝app
必须启用动态内存分配。
backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。