字符串表示
类似于字符数组,不过Matlab中字符串是用单引号括起来的字符序列。也是以ASCII码形式存储。
>> str='LuYihang';
>> str(3:6)
ans =
'Yiha'
注意:若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
>> str2='LuYi''hang'
str2 =
'LuYi'hang'
字符串矩阵
也可以建立多行字符串,形成字符串矩阵。
>> ch=['a:f';'1:6']
ch = //可以看到字符串中相用a:f代替abcdef是不行的,a:f就是一个字符串
2×3 char 数组
'a:f'
'1:6'
>> ch(2,2)
ans =
':'
例题:建立一个字符串向量,然后对该向量做如下处理:
1 取第1~5个字符组成的子字符串。
2 将字符串倒过来重新排列。
3 将字符串中的小写字母变成相应的大写字母,其余字符不变。
4 统计字符串中小写字母的个数。
>> ch='ABc123d4e56FG90';
>> subch=ch(1:5)
subch =
'ABc12'
//题目1
>> revch=ch(end:-1:1)
revch =
'09GF65e4d321cBA'
//题目2
>> k=find(ch>='a'&ch<='z')
k =
3 7 9
>> ch(k)=ch(k)-32
ch =
'ABC123D4E56FG90'
//题目3 支持ASCII码
>> length(k)
ans =
3
//题目4
字符串操作
1. 字符串的执行
格式: eval(s) s是字符串,作用是将字符串中的内容作为Matlab命令来执行,实现由键盘输入命令,而不是预先设置好命令,相比更灵活。
>> t=pi;
>> m='[t,sin(t),cos(t)]';
>> m
m =
'[t,sin(t),cos(t)]'
>> eval(m)
ans =
3.1416 0.0000 -1.0000
2. 字符串与数值之间的转换
abs和 double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
char函数可以把ASCII码矩阵转换为字符串矩阵。
>> s1='MATLAB';
>> a=abs(s1)
a =
77 65 84 76 65 66
>> b=char(a)
b =
'MATLAB'
3. 字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。
>> 'www 0'>='W1234'
ans =
1×5 logical 数组
1 1 1 0 0
使用关系运算符比较的前提:两个字符串的长度必须相等。
字符串比较函数用于判断字符串是否相等,有4种比较方式,函数如下:
1 strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
2 strncmp(s1,s2,,n):用来比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0。
3 strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等返回1,否则返回0。
4 strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0。
>> strncmpi('www0','W123',1)
ans =
logical
1
4. 字符串的查找与替换
strfind(s1,s2):返回字符串s2在字符串s1中的开始位置。
strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。
注意还有个findstr(s1,s2)函数,区别在于findstr函数中s1 s2无先后顺序区别,返回短字符串在长字符串中的开始位置。
>> strfind('ababedabababedfg','bed')
ans =
4 12
>> strfind('bed','ababedabababedfg')
ans =
[]
>> findstr('bed','ababedabababedfg')
ans =
4 12
>> strrep('ababedabababedfg','bed','toy')
ans =
'abatoyababatoyfg'