本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。
本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com
MATLAB具有强大的数据处理功能,这些强大功能实现的基础是MATLAB提供的各种数据类型。MATLAB本身提供了5种以上的内建数据类型,在前面章节中主要介绍了数组及矩阵的创建及其相关操作,数组和矩阵是读者使用比较多,而且比较熟悉的数据类型。在本章中将要介绍MATLAB的另外3类数据类型:字符数组、元胞数组和结构数组。MATLAB的元胞数组和结构数组都能在一个数组里存放各种不同类型的数据,但是两者处理数据的灵活程度不同,读者在学习这两种数据类型时应该注意区分。本章的主要内容如下:
- 字符数组
- 元胞数组
- 结构数组
4.1 字符数组
在MATLAB中,字符数组就是字符串,字符串中的每个字符在系统内部都是使用数值进行表示,并且以行向量的方式进行存储,因此可以通过使用下标访问数值数组元素的方式对字符串中的每个字符进行访问。与数组和矩阵相比,字符串的操作比较简单。
4.1.1 字符数组的创建
一个字符串由多个字符组成,用单引号(’’)来界定。字符串是按行向量的方式进行存储的,每一字符(包括空格)以ASCII码的形式存放。可以在屏幕上操作字符串,但一般不访问内部表示的数值。
【例4.1】字符数组的创建
常用的创建字符串的方法就是直接输入,并以单引号来界定。在命令窗口输入以下内容:
>> na1='hello'
生成字符数组na1如下:
na1 = hello
同样,在命令窗口中输入以下内容:
>> na2='this one is''a3'''
生成字符数组na2如下:
na2 = this one is'a3'
MATLAB的字符数组支持中文,在命令窗口中输入以下内容:
>> na3='还支持中文呢!'
生成字符数组na3如下:
na3 = 还支持中文呢!
使用whos命令可以查看字符数组的详细信息。在命令窗口中输入:
>> whos
返回各字符数组的详细信息如下:
Name Size Bytes Class
na1 1x5 10 char array
na2 1x15 30 char array
na3 1x7 14 char array
Grand total is 27 elements using 54 bytes
例4.1中直接定义的字符数组变量,这些变量的类型是已知的。如果工作空间中已有的变量类型未知,如何断定变量是否是字符串呢?MATLAB提供了两个函数class和ischar,使用这两个函数可以判断变量的类型。
以例4.1中变量na1为例,判断该变量的类型。在命令窗口输入:
>> class(na1) %返回nal的数据类型
函数class返回的结果如下:
ans = char
或者在命令窗口中输入:
>> ischar(na1) %返回0或1,如为1则是字符串,如为0则是非字符串
函数class返回的结果如下:
ans = 1
前面介绍的是直接输入字符创建字符数组的方法,MATLAB还提供了一个函数strcat用来创建字符数组。该函数的功能是将已知的两个或多个字符串组合在一起形成一个新的字符串。
例如使用例4.1中变量na1和变量na2创建一个新的字符数组,在命令窗口中输入:
>> strcat(na1,',',na2)
创建的新字符数组如下:
ans = hello,this one is'a3'
4.1.2 字符与数值的相互转化
字符数组在计算机内容的存储方式是将它所包含的每个字符用16位数字的方式进行保存。MATLAB提供了字符数组与数值数组进行相互转换的函数。转换函数的使用格式如下所示。
double(str) 将字符串str转换成数值数组
char(var) 将数值数组var转换成字符串
【例4.2】字符与数值的相互转化
>> na3='还支持中文呢!'
上述语句生成的字符数组na3如下:
na3 = 还支持中文呢!
使用double函数将na3转换成数值型,在命令窗口中输入以下命令:
>> na4=double(na3)
转换后的结果如下:
na4 =
Columns 1 through 6
36824 25903 25345 20013 25991 21602
Column 7
65281
使用char函数再将na4转换回原来的字符型,在命令窗口中输入以下命令:
>> na5=char(na4)
转换后的结果如下:
na5 = 还支持中文呢!
4.1.3 创建复杂字符数组
MATLAB不仅提供了简单字符串的创建方法,而且还提供了对字符串进行各种操作的函数,接下来介绍MATLAB提供的创建复杂的字符串的操作方法。
(1)创建二维字符数组
将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。也可将每个字符串放在一行,多个字符串可以构成一个二维字符数组。采用这种直接创建多行字符串数组方法时,一定要确保每个字符串(即每一行)的长度一样,否则MATLAB会提示出错。因此,在采用该方式创建字符串数组时必须先在短字符串结尾补上空格符,以确保每个字符串(即每一行)的长度一样。
【例4.3】创建二维字符数组
在命令窗口中输入以下内容,创建三个字符数组na1、na2和na3。
>> na1='hello';
>> na2='this one is''a3''';
>> na3='还支持中文呢!';
①使用两个长度不同的字符串组成一个列字符数组时将出错。例如输入如下内容:
>> na4=[na1;na2]
结果如下:
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
上述返回结果表明创建二维字符串数组失败,返回的错误提示信息为字符串na1和na2的长度不相同。
②使用两个长度不同的字符串组成一个列字符数组,并使用空格将短的字符补齐,数组可以创建成功。例如输入如下内容:
>> na4=['hello ';'this one is''a3''';'还支持中文呢! ']
生成的列字符数组如下:
na4 =
hello
this one is'a3'
还支持中文呢!
③将几个字符串连成一个行字符数组时,可以不考虑字符串的长度。例如输入:
>> na5=[na1,'!',na2,na3]
生成的行字符数组如下:
na5 =
hello!this one is'a3'还支持中文呢!
(2)使用串操作函数创建多行字符数组
使用直接输入法创建字符串数组,需要考虑字符串长度是否相等的问题,比较麻烦还很容易出错。为了解决这个问题MATLAB提供了专门函数构造出字符串矩阵,而不必考虑每行的字符数是否相等,它总是按最长的设置,不足的末尾用空格补齐。常用的几个函数的调用格式如下:
str2mat(s1,s2,…) 把字符串s1、s2等逐个写成行,形成多行字符数组
strvcat(s1,s2,…) 把字符串s1、s2等逐个写成行,形成多行字符数组,并删除全部空行
char(s1,s2,…) 把字符串s1、s2等逐个写成行,形成多行字符数组
【例4.4】串操作函数创建多行字符数组
首先在命令窗口中输入以下内容,创建三个字符数组na1、na2和na3。
>> na1='hello';
>> na2='this one is''a3''';
>> na3='还支持中文呢!';
①使用函数str2mat创建字符数组,在命令窗口中输入:
>> na6=str2mat(na1,na2,na3)
生成的字符数组如下:
na6 =
hello
this one is'a3'
还支持中文呢!
②使用函数char创建字符数组,在命令窗口中输入:
>> na7=char(na1,na2,na3)
生成的字符数组如下:
na7 =
hello
this one is'a3'
还支持中文呢!
③使用函数strvcat创建字符数组,在命令窗口中输入:
>> na8=strvcat(na1,na2,na3)
生成的字符数组如下:
na8 =
hello
this one is'a3'
还支持中文呢!
④创建字符数组后,使用whos指令察看工作空间中字符数组的使用存储空间的情况。在命令窗口中输入命令:
>> whos
返回结果如下:
Name Size Bytes Class
ans 1x21 42 char array
na1 1x5 10 char array
na2 1x15 30 char array
na3 1x7 14 char array
na6 3x15 90 char array
na7 3x15 90 char array
na8 3x15 90 char array
Grand total is 256 elements using 512 bytes
作者:德特数据
联系方式:156204968@qq.com