实际应用中,有两种基本的数据类型,一个是数值型数据,一个是字符型数据或称字符串数据。数值型数据比较好理解,是指能参与数值运算的数据,又分为整型、浮点型和复数型。字符型数据在日常应用中则不太强调,但却是大量存在的,例如统计一篇英文文章中不同英文字母出现的次数,按姓名排序,等等。字符串数据由若干个字符组成,这些字符可以是计算机系统中允许使用的任何字符。
在 MATLAB中,字符串是用单引号括起来的字符序列。
>> xm = 'Hello world'
xm =
'Hello world'
若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
>> 'I''m a student.'
ans =
'I'm a student.'
MATLAB将一个字符串当作一个行向量,每个元素对应一个字符,其引用方法和数值向量相同。
>> A = 'ABCDEF';
>> A(1:3)
ans =
'ABC'
建立多行字符串,形成字符串矩阵。
>> ch = ['abcdef';'123456']
ch =
2×6 char 数组
'abcdef'
'123456'
>> ch(2,3)
ans =
'3'
这里要求各行字符数要相等。为此,有时用空格来调节各行的长度,使它们彼此相等。
例子:建立一个字符串向量,然后对该向量做如下处理。
>> ch = 'ABc123d4e56Fg9';
>> subch = ch(1:5); % 取子字符串
>> subch
subch =
'ABc12'
>> revch = ch(end:-1:1) %将字符串倒排
revch =
'9gF65e4d321cBA'
>> k = find(ch >= 'a' & ch <= 'z') % 找出小写字母的位置
k =
3 7 9 13
>> ch(k) = ch(k) - ('a' - 'A') %根据位置将小写字母变成相应的大写字母
ch =
'ABC123D4E56FG9'
>> length(k) %小写字母的个数
ans =
4
字符串的执行 eval(s)
与字符串有方的一个重要函数是 eval,它的作用是把学符串的内容作为对应的 MATLAB的命令来执行。
>> t = pi;
>> m = '[t,sin(t),cos(t)]';
>> y = eval(m)
y =
3.1416 0.0000 -1.0000
字符串与数值之间的转换
字符串是以ASCHI码形式存储的,abs和 double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把 ASCI码矩阵转换为字符串矩阵。
>> s1 = 'MATLAB';
>> a = abs(s1)
a =
77 65 84 76 65 66
>> char(a + 32)
ans =
'matlab'
MATLAB还有许多用于字符串和数值数据之间转换的函数:
字符串的连接
在 MATLAB中,要将两个字符串连接在一起,有两种常见方法:一是用字符串向量,二是用strcat函数。
用字符串向量可以将若干个字符串连接起来,即用中括号将若干个字符串括起来,从而得到个更长的字符串。
>> f = 70;
>> c = (f - 32) / 1.8;
>> ['Room temperature is ',num2str(c) , ' degrees C.']
ans =
'Room temperature is 21.1111 degrees C.'
strcat的数可以将若干个字符串连接起来。
>> strcat('ss','ff','DD','1234')
ans =
'ssffDD1234'
字符串的比较
字符串的比较有两种方法:利用关系运算符或学符串比较函数。
当两个字符串拥有相同的长度时,可以利用关系运算符对字符串进行比较,比较的规则是按ASCII值大小逐个字符进行比较,比较的结果是一个数值向量,其元素为对应字符比较的结果。
>> 'www0' >= 'W123'
ans =
1×4 logical 数组
1 1 1 0
字符串比较函数用于判断字符串是否相等,有4种比较方式:
>> strcmp('www0','W123')
ans =
logical
0
>> strncmpi('www0','W123',1)
ans =
logical
1
字符串的查找与替换
MATLAB提供了许多函数,用来对字符串中的字符进行查找与替换。
findstr(s1 , s2) :返回短字符串在长字符串中的开始位置。
>> p = findstr('This is a test!','is')
p =
3 6
strrep(s1 , s2 , s3) : 将字符串s1中的所有子字符串s2替换为字符串s3。
>> result = strrep('This is a test!','test','class')
result =
'This is a class!'