当矩阵的每一个元素都是字符数组,行向量操作会将其合并成一个字符数组,如下
[‘ni’, ‘hao’]
ans =
'nihao'
写一个两行两列的矩阵,矩阵每个元素都是字符数组,结果如下,由于字符数量不一致,报错
[‘ni’,‘hao’;‘mat’,‘lab’]
错误使用 vertcat
要串联的数组的维度不一致。
将矩阵第一个元素的字符数变成三个,正常;
[‘nii’,‘hao’;‘mat’,‘lab’]
ans =
2×6 char 数组
'niihao'
'matlab'
用char转换字符数组,显示为两行3列字符数组(注意:生成的2*3chararray, ni后面自动补充了空格的)
char(‘ni’,‘hao’)
ans =
2×3 char 数组
'ni '
'hao'
用String不能讲字符数组转换成字符串数组
string(‘ni’,‘hao’)
错误使用 string
未找到具有匹配签名的构造函数 ‘string’。
以下是一个cell数组(用花括号,不用方括号)
{‘Andrew’ 31 ‘Male’ ‘Choose’;…
‘Bob’ 41 ‘Male’ ‘Choose’;…
‘Anne’ 20 ‘Female’ ‘Choose’}
ans =
3×4 cell 数组
{'Andrew'} {[31]} {'Male' } {'Choose'}
{'Bob' } {[41]} {'Male' } {'Choose'}
{'Anne' } {[20]} {'Female'} {'Choose'}
a={‘Andrew’ 31 ‘Male’ ‘Choose’;…
‘Bob’ 41 ‘Male’ ‘Choose’;…
‘Anne’ 20 ‘Female’ ‘Choose’}
a =
3×4 cell 数组
{'Andrew'} {[31]} {'Male' } {'Choose'}
{'Bob' } {[41]} {'Male' } {'Choose'}
{'Anne' } {[20]} {'Female'} {'Choose'}
用花括号可以索引出其中的元素,如下
a{2,2}
ans =
41
用赋值可以替换其中的元素,而且可以将数值替换成字符数组,如下
a{2,2}=‘NIHAO’
a =
3×4 cell 数组
{'Andrew'} {[ 31]} {'Male' } {'Choose'}
{'Bob' } {'NIHAO'} {'Male' } {'Choose'}
{'Anne' } {[ 20]} {'Female'} {'Choose'}
下面的语句可以给UITable赋值
myData={‘Andrew’ 31 ‘Male’ ‘Choose’;…
‘Bob’ 41 ‘Male’ ‘Choose’;…
‘Anne’ 20 ‘Female’ ‘Choose’};
app.UITable.Data= myData;
下面的语句也可以直接给UITable赋值(矩阵可以直接写入UITable)
myData=[10 31 70 80;…
90 41 100 200;…
1000 20 1 2];
app.UITable.Data= myData;
但下面这种数值矩阵中含有字符数组的不能直接写入UITable(元胞数组中数值和字符可以同时存在,矩阵中不行)
myData=[10 ‘nihao’ 70 80;…
90 41 100 200;…
1000 20 1 2];
下面的语句可以给UITable表头赋一行名称:先用char扩充字符数组的元素(见前面char的用法),然后用cellstr转化为字符串元胞数组, ;
Rowname=‘’;
Rowname=char(Rowname,‘name’);
Rowname=char(Rowname,‘age’);
Rowname=char(Rowname,‘sex’);
Rowname=char(Rowname,‘ok’);
Rownamecellstr= cellstr(Rowname); %转化为字符串元胞数组
app.UITable.ColumnName=Rownamecellstr;
看一下它生成的元胞数组 (第一个为空)
Rowname=‘’;
Rowname=char(Rowname,‘name’);
Rowname=char(Rowname,‘age’);
Rowname=char(Rowname,‘sex’);
Rowname=char(Rowname,‘ok’);
Rownamecellstr= cellstr(Rowname)
Rownamecellstr =
5×1 cell 数组
{0×0 char}
{'name' }
{'age' }
{'sex' }
{'ok' }
查看工作空间的情况
实际中使用的时候,为了避免用char扩充数组的时候第一个元素为空,可以用一个判断语句
if(Rowname==‘’ )
Rowname=newname ;
else
Rowname=char(Rowname, newname);
end
字符串数组用双引号
a=[“nihao”, “nihao”]
a =
1×2 string 数组
"nihao" "nihao"
字符串数组可以转化成元胞数组
b={“nihao”, “nihao”}
b =
1×2 cell 数组
{["nihao"]} {["nihao"]}
字符串数组不能给Table的Data命名,但是可以给行名或列命名,比如下面的语句会报错:设置类 ‘Table’ 的属性 ‘Data’ 时出错:
元胞数组中的值必须为数值、逻辑值或字符
myData={“Andrew” 31 “Male” “Choose”;…
“Bob” 41 “Male” “Choose”;…
“Anne” 20 “Female” “Choose”};
ClomnName={“name”,“age”,“sex”,“ok”};
app.UITable.Data= myData; %这个会报错
app.UITable.ColumnName=ClomnName; %这个不会报错
用string比上面用char扩充数组更方便,因为string数组方便用矩阵进行扩展,而且不会因为每个string里面的字符数不同而自动填充空格。如下:
a=[“ni”,“hao”]
a =
1×2 string 数组
"ni" "hao"
cellstr(a)
ans =
1×2 cell 数组
{'ni'} {'hao'}
表示矩阵
a=[“ni”,“hao”;“mat”,“lab”]
a =
2×2 string 数组
"ni" "hao"
"mat" "lab"
cellstr(a)
ans =
2×2 cell 数组
{'ni' } {'hao'}
{'mat'} {'lab'}
a=[1 2 3]
a =
1 2 3
b=[“n”,“i”,“h”]
b =
1×3 string 数组
"n" "i" "h"
c=[a;b]
c =
2×3 string 数组
"1" "2" "3"
"n" "i" "h"
cellstr©
ans =
2×3 cell 数组
{'1'} {'2'} {'3'}
{'n'} {'i'} {'h'}