MATLAB软件的字符串比较操作
字符串比较操作主要涉及对字符串按字母顺序进行比较及对字符串进行匹配、查找、替换和提取子串等一系列的操作。这些是比较有用的操作,也可以归入调用命令部分,下面来详细讲解。
1.两个字符串比较
(1)strcmp('string1','string2'):将两个字符串进行比较,如果两字符串相等,此函数返回逻辑“真”,否则返回逻辑“假”,即此函数只能判断两字符串是否相等,而不能判断按字母顺序谁在谁前面。
(2)strcmp(C1,C2):如果C1和C2都是由字符串组成的大小相同的单元阵,此函数返回一个与单元阵相同大小的逻辑矩阵。如果单元阵C1和C2相同位置上的字符串相同,则在逻辑矩阵的相应位置上输出1,否则输出0。C1和C2其中之一或全部可以为字符串或字符串矩阵,但返回的逻辑矩阵与单元阵有相同的大小。
例2.32 利用strcmp()函数对两个字符串进行比较。
>> strcmp('hello','hello')
ans =
1
>> strcmp('hello','world')
ans =
0
>> c1={'my' 'name';'is' 'lilei'}
c1 =
'my' 'name'
'is' 'lilei'
>> c2={'her' 'name';'is' 'lili'}
c2 =
'her' 'name'
'is' 'lili'
>> c3='NAME'
c3 =
NAME
>> c4 = ['my' 'name';'is' 'lili']
c4 =
myname
islili
>> c5 = ['my' 'name';'is' 'lili']
c5 =
myname
islili
>> strcmp(c1,c2)
ans =
0 1
1 0
>> strcmp(c1,c3)
ans =
0 0
0 0
>> strcmp(c5,c4)
ans =
1
注意:前导或后导空格也会参与比较,比较函数对大小写是敏感的。
2.比较字符串的前n个字符
(1)strncmp('string1','string2',n):如果2个字符串的前n个字符相同,则此函数返回逻辑“真”,否则返回逻辑“假”,比较函数对大小写敏感。
(2)strncmp(C1,C2,n):如果C1和C2为由字符串组成的大小相同的单位阵,则此函数将相同位置的字符串的前n个字符进行比较。如果相同就在相同位置输出1,否则输出0;如其中之一为字符串,则将单位阵中的所有字符串都与这个字符串进行比较,返回与单位阵相同大小的逻辑阵。
例2.33 利用strncmp()函数对两个字符串的前n个字符进行比较。
>> s1='MATLAB';s2='MATLAB';
>> strncmp(s1,s2,3)
ans =
1
>> strncmp(s1,s2,4)
ans =
0
>> c1={'good' 'bad';'MATLAB' 'MATLAB'}
c1 =
'good' 'bad'
'MATLAB' 'MATLAB'
>> c2='MATLAB'
c2 =
MATLAB
>> strncmp(c1,c2,3)
ans =
0 0
1 1
>> strncmp(c1,c2,4)
ans =
0 0
0 0
3.匹配字符串操作
格式如下:
strmatch('substr',S)
S可以是字符串矩阵或由字符串组成的单元阵,如果是单元阵,则必须是单列,函数返回以字符串substr开始的行的行号。字符串矩阵的查找速度要比单元阵的查找速度快。
例2.34 利用strmatch()函数对字符串进行匹配。
>> k=strmatch('good',strvcat('good','badgood','goodbad'))
k =
1
3
>> s={'yes';'noyes';'yesno'}
s =
'yes'
'noyes'
'yesno'
>> strmatch('yes',s,'exact')
ans =
1
4.在字符串中查找子串
格式如下:
findstr('str1', 'str2')
此函数在长字符串中查找短的字符串,并返回字符串中短字符串开始的所有位置。子串和母串在括号中既可在前也可在后,即str1、str2中任意一个都可作为子串或母串。
例2.35 利用findstr()函数在字符串中查找子串。
>> s='This is a good goose.'
s =
This is a good goose.
>> b=findstr(s,'oo')
b =
12 17
5.字符串替换操作
格式如下:
strrep('str1','str2','str3')
此函数将字符串str1中的所有的字符串str2用字符串str3来代替。其中,str1、str2和str3任何一个可以为字符串组成的单位阵或矩阵,返回的结果与此单位阵或矩阵有相同的大小。如果两个以上为单元阵或矩阵时,则它们的类型和大小必须相同(每行字符数是不同的)。
例2.36 利用strrep()函数对字符串进行替换操作。
>> strrep(s,'oo','ee')
ans =
This is a geed geese.
>> str1={'MATLAB' 'welcome';'you' 'me'}
str1 =
'MATLAB' 'welcome'
'you' 'me'
>> str2={'MATLAB' 'lab';'good' 'software'}
str2 =
'MATLAB' 'lab'
'good' 'software'
>> str3={'mat' 'come';'you' 'me'}
str3 =
'mat' 'come'
'you' 'me'
>> strrep(str1,str3,str2)
ans =
'MATLABlab' 'wellab'
'good' 'software'
>> strrep(str1,'me','you')
ans =
'MATLAB' 'welcoyou'
'you' 'you'
>> strrep('MATLAB',str2,'!!!')
ans =
'!!!' 'MATLAB'
'MATLAB' 'MATLAB'
>> strrep('MATLAB','lab',str3)
ans =
'matmat' 'matcome'
'matyou' 'matme'
6.得到指定的子串
(1)strtok('string',d):此函数返回由字符串d作为分割的字符串string的第1部分,也就是说,返回字符串string中第1个字符d之前的所有字符。如果字符串中不含有字符d,则返回整个字符串;如果d字符恰为字符串string的第1个字符,则函数返回除第1个字符之外的所有字符。合法的d可以为任意字符或字符串,如果d为字符串,则将它的第1个字符作为分隔符。如果string中有前导空格,则前导空格将被忽略。
(2)strtok('string'):此函数以默认的回车符(ASCII码为13)、制表符(ASCII码为9)、空格(ASCII码为32)作为分割符,前导空格将被忽略。
(3)[token,rem]=strtok(…):此函数不但返回上面的查找结果token,还返回剩余的字符串rem,其中不包括分割符,前导空格被忽略。其中strtok(…)可以为strtok('string')或strtok('string',d)形式。
例2.37 利用strtok()函数得到指定的子串。
>> s='This is my good friend.'
s =
This is my good friend.
>> strtok(s,'is')
ans =
Th
>> strtok(s,'o')
ans =
This is my g
>> strtok(s,'T')
ans =
his is my good friend.
>> strtok(s,' ')
ans =
This
>> strtok(s)
ans =
This
>> [token,rem]=strtok(s,'m')
token =
This is
rem =
my good friend.
>> [token,rem]=strtok(s)
token =
This
rem =
is my good friend.
7.判断串中元素是否为字母
格式如下:
isletter(S)
S可以是字符串或字符串矩阵,此函数返回与S同样维数的逻辑矩阵,如果S中的元素为字母,则在逻辑矩阵的相应位置上输出1,否则输出0。
例2.38 利用isletter()函数判断字符串中元素是否为字母。
>> isletter(s)
ans =
Columns 1 through 9
1 1 1 1 0 1 1 0 1
Columns 10 through 18
1 0 1 1 1 1 0 1 1
Columns 19 through 23
1 1 1 1 0
8.判断串中元素是否为空格
格式如下:
isspace(S)
此函数与isletter(S)用法相同,在为空格的相应位置上输出1,否则输出0。
例2.39 利用isspace()函数判断字符串中元素是否为空格。
>> isspace(s)
ans =
Columns 1 through 9
0 0 0 0 1 0 0 1 0
Columns 10 through 18
0 1 0 0 0 0 1 0 0
Columns 19 through 23
0 0 0 0 0