matlab中,如何将字符串转换为命令控制字?

比如说我要写
set(text1,'String',a(1))
或者写
text1=1: %不是text(1),不是数组

要text1到text100,
可以生成“text1”到“text100”这个字符串,
怎样才能把这个字符串变成可以再set命令或者等式里使用的
谢谢

字 符 串 转 换

abs

字符串到ASCII转换

dec2hex

十进制数到十六进制字符串转换

fprintf

把格式化的文本写到文件中或显示屏上

hex2dec

十六进制字符串转换成十进制数

hex2num

十六进制字符串转换成IEEE浮点数

int2str

整数转换成字符串

lower

字符串转换成小写

num2str

数字转换成字符串

setstr

ASCII转换成字符串

sprintf

用格式控制,数字转换成字符串

sscanf

用格式控制,字符串转换成数字

str2mat

字符串转换成一个文本矩阵

str2num

字符串转换成数字

upper

字符串转换成大写

在许多情况下,希望把一个数值嵌入到字符串中。几个字符串转换可完成这个任务。
» rad=2.5; area=pi*rad^2;
» t=[' A circle of radius ' num2str(rad) ' has an area of ' num2str(area) ' . ' ] ;
» disp(t)
A circle of radius 2.5 has an area of 19.63.
这里函数num2str用来把数值转换成字符串,字符串连接用来把所转换的数嵌人到一个字符串句子中。按类似方式,int2str把整数转换成字符串。无论是num2str还是int2str都调用函数sprintf,它用类似C语言语法把数值转换成字符串。
函数fprintf经常是函数disp的一个有用替换,由于它提供了对结果更多的控制。当准备把格式化的数据写到一个文件中去时,按缺省它在命令窗口显示结果。例如,
» fprintf(' See what this does ')
See what this does»
» fprintf(' See what this does\n ')
See what this does
在上面第一个例子里,fprintf显示字符串,然后立即给出MATLAB提示符。相反,在第二个例子里,\n 插入一个新行字符,在MATLAB提示符出现之前创建一个新行。
无论fprintf还是sprintf以同样方式处理输入参量,但fprintf把输出送到显示屏或文件中,而sprintf把输出返回到一个字符串中。例如,上面的例子用num2str可重写为
» t=sprintf(' A circle of radius %.4g has an area of %.4g. ', rad, area);
» disp(t)
A circle of radius 2.5 has an area of 19.63.
» fprintf(' A circle of radius %.4g has an area of %.4g.\n ' , rad, area)
A circle of radius 2.5 has an area of 19.63.
这里%.4g是用在函数num2str中的数据格式。%.4g就是用指数或定点标记,不管哪一种更短些,只显示至4位数字。除了g格式,还可用e (指数)和f (定点)转换。表6.2表明在各种不同转换下,如何显示pi结果。
表6.2

数 值 格 式 转 换 例 子

命令

结果

fprintf(' %.0e\n ',pi)

3e+00

fprintf(' %.1e\n ',pi)

3.1e+00

fprintf(' %.3e\n ',pi)

3.142e+00

fprintf(' %.5e\n ',pi)

3.14159e+00

fprintf(' %.10e\n ',pi)

3.1415926536e+00

fprintf(' %.0f\n ',pi)

3

fprintf(' %.1f\n ',pi)

3.1

fprintf(' %.3f\n ',pi)

3.142

fprintf(' %.5f\n ',pi)

3.14159

fprintf(' %.10f\n ',pi)

3.1415926536

fprintf(' %.0g\n ',pi)

3

fprintf(' %.1g\n ',pi)

3

fprintf(' %.3g\n ',pi)

3.14

fprintf(' %.5g\n ',pi)

3.1416

fprintf(' %.10g\n ',pi)

3.141592654

fprintf(' %.8.0g\n ',pi)

3

fprintf(' %.8.1g\n ',pi)

3

fprintf(' %.8.3g\n ',pi)

3.14

fprintf(' %.8.5g\n ',pi)

3.1416

fprintf(' %.8.10g\n ',pi)

3.141592654

注意,对e 和f 格式,小数点右边的十进制数就是小数点右边要显示的多少位数字。相反,在g 的格式里,小数点右边的十进制数指定了显示数字的总位数。另外,注意最后的五行,其结果指定为8个字符长度,且是右对齐。在最后一行,8被忽略,因为指定超过了8位。
概括起来,当需要比缺省函数disp,num2str和int2str所提供的更多的控制时,fprintf和sprintf是有用的。
函数str2mat把一列的几个字符串转换成一个字符串矩阵。例如,
» a=' one ' ; b= ' two ' ; c= ' three ' ;
» disp(str2mat(a, b, c, ' four '))
one
two
three
four
从上面看不明显,上面的每行有同样数目的元素。较短行用空格补齐,使结果形成一个有效的矩阵
在逆方向转换中,有时是很方便的。
» s= ' [1 2; pi 4] ' % a string of a MATLAB matrix
s =
[1 2; pi 4]
» str2num(s)
ans =
1.0000 2.0000
3.1416 4.0000
» s=' 123e+5 ' % a string containing a simple number
s =
123e+5
» str2num(s)
ans =
12300000
函数str2num不能接受用户定义的变量,也不能执行转换过程的算术运算。

pcolor(X,Y,C)函数的用法: X,Y是用来定位的,C是用来填充颜色的。
当X,Y是向量时,X与C的列对应,Y与C的行对应,因此向量X和Y的维数必须要求与C的列与行统一。所以使用时注意检查X,Y,C的大小和维数。
其后面最好用上函数:shading interp;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-04
()这个函数满足你的要求。
如:str1=‘set(text1,“String”,a(1))’;
eval(str1);
相当于执行了这个语句。本回答被网友采纳
第2个回答  推荐于2016-08-18
请问你这里的text1是什么?对象?普通变量?对象的handle?

你在引用text1之前,text1是否已经存在?追问

目前想写的是这个
set(handles.checkbox1,'String',a(1));
gui里面的100个checkbox,checkbox1是tag,要一个一个改他们的string

追答

有个比较变通的方法。handles.checkbox1实际上是一个实数。所以,你先用一个数组h(i)把handles.checkbox1~handles.checkbox100都记下来,然后set(h(i),....)即可。

追问

这样还是要写100个啊。问题是可以写成
h(i)=[ 'handles.checkbox' numstr2(i)];
这样h(i)只是一个字符串,要把它变成handles.checkbox1控制字,把引号去掉

追答

那100个你只需要写一次即可,后面你就可以随便set了。生成h(i)不一定要一个一个手打,用excel什么的拉一下就出来了,像这样子:

h=[handles.checkbox1
handles.checkbox2
handles.checkbox3
handles.checkbox4
handles.checkbox5
handles.checkbox6
handles.checkbox7
handles.checkbox8
handles.checkbox9
handles.checkbox10
handles.checkbox11
handles.checkbox12
handles.checkbox13
handles.checkbox14
handles.checkbox15
handles.checkbox16
handles.checkbox17
handles.checkbox18
handles.checkbox19
handles.checkbox20
handles.checkbox21
handles.checkbox22
handles.checkbox23
handles.checkbox24
handles.checkbox25
handles.checkbox26];


主要是我也没见过直接把一个字符串转变成变量引用的写法。

追问

我去。。。要不要这么狠。。代码一下多了N多行。。
我找到一个函数 eval()
比如
h=['handles.checkbox' '1'];
h=eval(h)
set(h,'String',aa(1));
这样是可以的,但是不能写成数组h(i)=['handles.checkbox' 'i'];h(i)=eval(h(i))

追答

这个可以用cell来实现。

h{i}=['handles.checkbox' '1'];
h1(i)=eval(h{i})
set(h1(i),'String',aa(1));

这里的问题在于字符串本身是一个字符数组,所以需要一个能够以数组作为元素的结构,这个结构在Matlab里面叫做cell。

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网