美文网首页
MATLAB编程与应用系列-第4章 字符、元胞和结构数组(3)

MATLAB编程与应用系列-第4章 字符、元胞和结构数组(3)

作者: 德特数据 | 来源:发表于2018-10-26 07:19 被阅读0次

本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。

本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com

4.1.5 字符的分类

在MATLAB中还提供了两个查看字符串的字符是否为字母或空格的函数isletter和isspace。函数的调用格式如下:

①isletter(A)
②isspace(A)

其中,命令行① 判别字符串A的每个字符是否为字母,并返回一逻辑向量。向量中值为1代表该位置的字符为字母,为0则不是;命令行②判别字符串A的每个字符是否为空格,并返回一逻辑向量。向量中值为1代表该位置的字符为空格,为0则不是。

【例4.6】字符的分类
在命令窗口中输入以下内容,生成字符串a如下:
>> a='it is 12'
a =
it is 12
①使用函数isletter判别字符串a的每个字符是否为字母。在命令窗口输入:
>> a1=isletter(a)
返回结果如下:
a1 =
1 1 0 1 1 0 0 0
②使用函数isspace判别字符串a的每个字符是否为空格。在命令窗口输入:
>> a2=isspace(a)
返回结果如下:
a2 =
0 0 1 0 0 1 0 0
同样使用函数isletter和isspace可以对字符串数组中的字符进行判断。在命令窗口中输入以下内容,生成字符串数组b如下:
>> b=['12a ';' bb';'pipi';'is a'];
③判别字符串b的每个字符是否为字母,并得到对应矩阵。在命令窗口输入:
>> isletter(b)
返回结果如下:
ans =
0 0 1 0
0 0 1 1
1 1 1 1
1 1 0 1
④判别字符串b的每个字符是否为空格,并得到对应矩阵。在命令窗口输入:
>> isspace(b)
返回结果如下:
ans =
0 0 0 1
1 1 0 0
0 0 0 0
0 0 1 0
⑤对单元矩阵形式的字符串,不能直接使用这两个函数,必须对指定的单元进行判定。例如在命令命令窗口中输入以下内容,生成单元矩阵b如下所示:
>> b={'12a ';' bb';'pipi';'is a'}
b =
'12a '
' bb'
'pipi'
'is a'
对单元矩阵中的第1和2单元进行判定,在命令窗口分别输入以下内容并返回结果如下所示:
>> isletter(b{1}) %判断单元1中各个字符是否是字母
ans =
0 0 1 0
>> isspace(b{2}) %判断单元2中各个字符是否是空格
ans =
1 1 0 0

注意:如例4.6所示,对单元矩阵形式的字符串,不能直接使用这两个函数,必须对指定的单元进行判定。

4.1.6 字符串的查找和替换

MATLAB中提供了一些函数用于字符串的查找和替换。

strrep(A,'B','C') 把字符串A中的字符段B换成C

find('B',A) 在字符串A中查找字符段B的位置,返回对应向量

【例4.7】字符串的查找和替换
>> ss1='比较字符串x和y的内容是否相同'
在命令窗口中输入以上内容,生成字符串如下:
ss1 =
比较字符串x和y的内容是否相同
①把字符串ss1中的字符段“内容”换成“前n个字符”。在命令窗口中输入:
>> ss2=strrep(ss1,'内容','前n个字符')
替换后返回的结果如下:
ss2 =
比较字符串x和y的前n个字符是否相同
②在字符串ss1中查找字符段“x”的位置并返回对应向量。在命令窗口中输入:
>> ss3=findstr('x',ss1) %在字符串ss1中查找字符段“x”的位置并返回对应向量
返回结果如下:
ss3 =
6
③在字符串ss1中查找字符段“z”的位置并返回对应向量。在命令窗口中输入:
>> ss3=findstr('z',ss1) %在字符串ss1中查找字符段“z”的位置并返回对应向量
返回结果如下:
ss3 =
[]
从上面的例子可以看出,如果函数未找到指定字符,返回空矩阵符号“[]”。

4.1.7 类型转换

前面介绍了字符和数值之间的相互转化,除此之外,MATLAB提供了其他一些类型的转换函数以满足用户各种操作需求。具体的调用格式见表4.1。

表4.1 类型转换函数

函数名 功能
cellstr(A) 把字符串A转换到一个字符串单元数组中
char(A) 把字符串单元数组A转换为标准字符串数组
str2double(A) 把字符串单元数组A转换为字符串表示的双精度值
int2str(A) 将整型数据A转换为字符串型数据
num2str(A,n) 将数据A转化为字符串型数据,n为输出字符串的位数
mat2str(A) 将数组改变为一个可以评价的字符串,返回一个包含文本的字符串

【例4.8】类型转换
在命令窗口中输入以下内容,生成字符串如下:
>> x1=['比';'较';'字';'符';'串';'x';'和';'y']’
①字符串x1转换到一个字符串单元数组中。在命令窗口中输入:
>> x2=cellstr(x1)
②把字符串单元数组x2转换为标准字符串数组。在命令窗口中输入:
>> x3=char(x2)
在命令窗口中输入以下内容,创建字符串数组x4:
>> x4=['39.2546';'5698422';'25.5534';'2265e-1']';
③把字符串x4转换到一个字符串单元数组中。在命令窗口中输入:
>> x5=cellstr(x4)
④把字符串单元数组x5转换为字符串表示的双精度值。在命令窗口中输入:
>> x6=str2double(x5)
⑤将整型数据x6转换为字符串型数据。在命令窗口中输入:
>> x7=int2str(x6)
⑥将数据x6转化为字符串型数据,10为输出字符串的位数。在命令窗口中输入:
>> x8=num2str(x6,10)
使用whos命令察看工作空间,在命令窗口输入whos命令及返回的结果如下:
>> whos
Name Size Bytes Class
x1 8x1 16 char array
x2 8x1 496 cell array
x3 8x1 16 char array
x4 4x7 56 char array
x5 4x1 296 cell array
x6 4x1 32 double array
x7 4x7 56 char array
x8 4x7 56 char array

【例4.9】典型应用字符串函数:图形标注
在MATLAB命令行窗口中输入以下程序段或者建立M文件,运行M文件:
>> x=0:0.1:2;
>> y=sin(x);%分别将x的最小值和最大值转化为字符串
>> s1=num2str(min(x))
>> s2=num2str(max(x))%分别将y的最小值和最大值转化为字符串
>> s3=num2str(min(y))
>> s4=num2str(max(y))
>> ox=['变量的值从',s1,'变化到',s2]
>> oy=['函数的值从',s3,'变化到',s4]
>> plot(x,y) %画出x和y的曲线
>> xlabel(ox) %标注x坐标的标题
>> ylabel(oy) %标注y坐标的标题
生成结果如图4.1所示。

图4-1.png

【例4.10】其他字符串函数
本例中介绍了一些对字符串进行其他操作的函数的使用示例。在命令窗口中输入以下内容,生成字符串str1。
>> str1='hello'
str1 =
hello
使用函数length查看字符串的长度,返回值为字符串的长度值。在命令窗口中输入以下内容:
>> length(str1)
返回结果如下:
ans =
5

因为字符串是以数值的方式存储的,所以可以对字符串进行简单的数值运算,但是在使用过程中这种情况比较少见。

例如对str进行加运算,在命令窗口中输入以下内容:
>> x1=double(str1)
x1 =
72 101 108 108 111
>> x2=str1+1 %进行数值计算
x2 =
73 102 109 109 112
>> char(x1)
ans =
Hello
>> char(x2)
ans =
Ifmmp

如果字符串是一算术表达式,可以使用eval函数直接计算该表达式。

例如:
>> str2='a=2*5'
str2 =
a=2*5
>> eval(str2) %计算字符串str2的值
a =
10

作者:德特数据
联系方式:156204968@qq.com

相关文章

网友评论

      本文标题:MATLAB编程与应用系列-第4章 字符、元胞和结构数组(3)

      本文链接:https://www.haomeiwen.com/subject/udjxtqtx.html