本节书摘来自异步社区《MATLAB R2012a超级学习手册》一书中的第2章,第2.4节,作者 史洁玉 , 孔玲军,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.4 字符串处理函数
MATLAB R2012a超级学习手册
MATLAB能够很好地支持字符串数据,可以用两个不同的方式来表示字符串,即字符数组和字符串单元数组。
2.4.1 字符串的构造
通常可以用m×n的字符数组来表示多个字符串,只要这些字符串的长度是一样。当需要保存多个不同长度的字符串时,可以用单元类型来实现。
MATLAB提供了很多字符串操作,包括字符串的创建、合并、比较、查找以及与数值之间的转换。下面介绍如何创建字符串的操作。
1.创建字符数组
可以用一对单引号来表示字符串,例如下面的示例代码。
>>str='helloMATLAB2012'
str =
helloMATLAB2012
也可以用字符串合并函数strcat()来得到一个新的字符串,例如下面的示例代码。
>>a='hello';
>>b='MATLAB2012';
>>c=strcat(a,b)
上述语句得到输出代码如下。
c=
helloMATLAB2012
注意:
函数strcat()在合并字符串的同时会把字符串结尾的空格删除。要保留这些空格,可以用矩阵合并符[]来实现字符串合并,例如下面的示例代码。
>>a='hello';
>>b='MATLAB 2012';
>>c=[a b]
上述语句得到输出代码如下。
c=
hello MATLAB 2012
利用函数char()来创建字符串。该函数创建字符串数组时,如果字符串不具有相同的长度,则函数char()自动用空格把字符串补足到最长的字符串的长度。例如下面的示例代码。
>>c=char('hello','MATLAB2012')
上述语句得到输出代码如下。
c=
hello
MATLAB2012
2.创建字符串单元数组
可以用函数cellstr()来创建字符串单元数组。例如,有一个字符数组如下。
>>data=['hello';'MATLAB2012']
上述语句得到输出代码如下。
data=
hello
MATLAB2012
下面语句的功能是把上述字符数组转换成为字符串单元数组,示例代码设置如下。
>>celldata=cellstr(data)
上述语句得到输出代码如下。
celldata=
'hello'
'MATLAB2012'
注意:
函数cellstr()已经把字符串尾部的空格截去。例如下列语句可以查看celldata的第一个字符串长度。
>>length(celldata{1})
上述语句得到输出代码如下。
ans=
5
可以用函数char()把一个字符串单元数组转换成一个字符数组,示例代码设置如下。
>>chararray=char(celldata)
上述语句得到输出代码如下。
chararray=
hello
MATLAB2012
其第一个字符串的长度可以得到如下的代码。
>>length(chararray(1,:))
上述语句得到输出代码如下。
ans=
11
2.4.2 字符串比较函数
MATLAB里包括以下几种比较字符串和字符子串的方法。比较两个字符串或者两个字符串的子串是否相同。
比较两个字符串中的单独字符是否相同。
对字符串内的元素进行识别,判定每一个元素是字符还是空白符(包括空格、制表符Tab和换行符)。
这些函数对字符数组和字符串数组都适用。
1.字符串比较函数
MATLAB提供的字符串比较函数如表2-18所示。
例如,有两个字符串如下。
>>str1='aaabbb';
>>str2='aaabbc';
由于这两个字符串不相同,故调用函数strsmp()的结果为0,语句如下。
>>c=strcmp(str1,str2)
上述语句得到输出代码如下。
c=
0
这两个字符串的前5个字符是相同的,故用函数strncmp()比较它们的前5个字符,会返回1,代码设置如下。
>>c=strncmp(str1,str2,5)
上述语句得到输出代码如下。
c=
1
2.用关系运算符比较字符串
可以对字符数组运用MATLAB7.0的关系运算符,但是要求比较的字符数组具有相同的维数,或者是其中一个是标量。例如,以下代码是用等号运算符(==)来判断两个字符串里哪些字符是相同的。
>>str1='aabbcc';
>>str2='abbabc';
>>c=str1==str2
上述语句得到输出代码如下。
c =
1 0 1 0 0 1
提示:
也可以用其他关系运算符(>、>=、<、<=、==、!=)来比较两个字符串。
2.4.3 字符串查找和替换函数
MATLAB提供的一般字符串查找和替换函数如表2-19所示。
下面例子是实现字符串替换。
>>s1='I am a teacher.';
>>str=strrep(s1,'teacher','student')
上述语句得到输出代码如下。
str=
I am a student.
下面例子是用于实现字符串查找。
>>str='I am a teacher.';
>>index=strfind(str,'e')
上述语句得到输出代码如下。
index =
9 13
下面例子是用于获得第一个分隔符之前的字符串。
>>s='I am a teacher.';
>>[a,b]=strtok(s)
上述语句得到输出代码如下。
a=
I
b=
am a teacher.
2.4.4 字符串与数值的转换
MATLAB提供的把数值转换为字符串的函数如表2-20所示。
MATLAB提供的把字符串转换为数值的函数如表2-21所示。
例如,要在命令行中输出一行字符串来显示向量x的最小值,使用代码如下。
>>x=rand(1,5)
>>disp(['向量x中的最小值为:'num2str((min(x)))]);
其中,函数disp()是在命令行中显示一个字符串。由上述语句得到的结果如下。
x=
0.1419 0.4218 0.9157 0.7922 0.9595
向量x中的最小值为0.1419