最近因实验需求,需要用代码有规律地自动生成变量名称并声明变量。通过翻阅资料,整理出来以下可行方案。
首先是有规律地生成变量名称,我们可能需要生成变量名为list1,list2,list3……这样的名称,名称中的字符串“list”是固定不变的,后面跟的数字是变化的。我们想要用代码实现这一串变量名称的自动生成,需要解决的问题有三个。第一个是:将数字转换为字符。第二个是:拼接两个字符串。第三个是:将字符串转换成变量名称。
将数字转换为字符的方法在Octave中有num2str函数可供调用,例如将数字2转换为字符,可以用以下语句:
num2str(2)
更多实例:
拼接两个字符串,可以用以下几种方法
1.通过 c=[a1,b1]格式拼接,实例如下
>> a = 'sdf'
a = sdf
>> b = 'dfgfg'
b = dfgfg
>> c = [a,b]
c = sdfdfgfg
>> d = ['dfd','fdf']
d = dfdfdf
2.通过调用函数 strcat来实现
>> a = 'sdf'
a = sdf
>> b = 'dfgfg'
b = dfgfg
>> d=strcat(a,b)
d = sdfdfgfg
将字符串转换为变量名称
使用函数eval来实现
>> str = ['dsfd',num2str(4)]
str = dsfd4
>> eval( [str, '= zeros(1,6)'])
dsfd4 =
0 0 0 0 0 0
好啦,到这里所有的问题都解决了,我用代码循环生成了我需要的变量。list2,list3,list4……list10。
for c = 0.2:0.1:1
str = ['list',num2str(c*10)]
eval( [str, '= zeros(1,20)'])
endfor
str = list2
list2 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list3
list3 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list4
list4 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list5
list5 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list6
list6 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list7
list7 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list8
list8 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list9
list9 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
str = list10
list10 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0