第2章 MATLAB基础知识——2.4 字符串处理函数

简介: 第2章 MATLAB基础知识——2.4 字符串处理函数

2.4  字符串处理函数


MATLAB中提供了大量的字符串处理函数,如表2-25所示。

2-25  MATLAB中的字符串处理函数

字符串处理函数

函数功能

eval(string)

作为一个MATLAB命令求字符串的值

blanks(n)

返回一个n个零或空格的字符串

deblank

去掉字符串中末尾的空格

feval

求由字符串给定的函数值

findstr

从一个字符串内找出字符串

isletter

字母存在时返回真值

isspace

空格字符存在时返回真值

isstr

输入一个字符串,返回真值

iasterr

返回上一个产生MATLAB错误的字符串

strcmp

字符串相同,返回真值

strrep

用一个字符串替换另一个字符串

strtok

在一个字符串里找出第一个标记


2.4.1  字符串的构造


字符串或字符串数组的构造可以通过直接给变量赋值来实现,具体表达式中字符串的内容需要写在单引号内。如果字符串的内容包含单引号,那么以两个重复的单引号来表示。

在构造多行字符串时,若字符串内容写在[]内,那么多行字符串的长度必须相同;若字符串内容写在{}内,则多行字符串的长度可以不同。


2-55:直接赋值构造字符串示例。

在命令行窗口中输入:

Str_a = 'How are you?',Str_b = 'I don''t know.',Str_c = strcat(Str_a,Str_b)

输出结果:

Str_a =
    'How are you?'
Str_b =
    'I don't know.'
Str_c =
    'How are you?I don't know.'


在命令行窗口中输入:

Str_mat = ['July';'August';'September';]

输出结果:

错误使用 vertcat
要串联的数组的维度不一致。


在命令行窗口中输入:

Str_mat1 = ['U r a man.';'I’m a pen.';],
Str_mat2 = {'July';'August';'September';}

输出结果:

Str_mat1 =
  2×10 char 数组
    'U r a man.'
    'I’m a pen.'
Str_mat2 =
  3×1 cell 数组
    {'July'     }
    {'August'   }
    {'September'}


MATLAB中还提供了strvcatchar函数用于纵向连接多个字符串。在使用strvcat函数连接多行字符串时,每行字符串的长度不要求相等,所有非最长字符串的右边会自动补偿空格,使得每行字符串的长度相同。char函数与strvcat函数类似,不过当多行字符串中有空字符串时,strvcat函数会自动进行忽略,而char函数会把空字符串也用空格补偿后再进行连接。


2-56:构造字符串示例。

在命令行窗口中输入:

A = 'top'; B = '';C = 'Bottom';
sABC = strvcat(A,B,C),cABC = char(A,B,C),size = [size(sABC);size(cABC)]

输出结果:

sABC =
  2×6 char 数组
    'top   '
    'Bottom'
cABC =
  3×6 char 数组
    'top   '
    '      '
    'Bottom'
size =
     2     6
     3     6


2.4.2  字符串比较函数


两个字符串之间的关系可以通过关系运算符来比较,也可以使用strcmp函数来比较两个字符串是否相同。


2-57:比较字符串示例。

在命令行窗口中输入:

A = (' Hello ' == ' Word ')

输出结果:

矩阵维度必须一致。


在命令行窗口中输入:

A = (' Hello ' == ' World '),B = (' Hello ' == ' Hello '),
C = strcmp(' Hello ',' World '),D = strcmp(' Hello ',' Hello ')

输出结果:

A =
  1×7 logical 数组
   1   0   0   0   1   0   1
B =
  1×7 logical 数组
   1   1   1   1   1   1   1
C =
  logical
   0
D =
  logical
   1


提示:在使用关系运算符进行比较时,会对字符串的每个字符进行比较,返回值是一个与字符串长度相同大小的数组,因此被比较的两个字符串的长度必须相同;而strcmp函数则根据两个字符串相同与否,返回值为数值01


2.4.3  字符串查找和替换函数


字符串的查找与搜索可以通过findstr函数来实现。


2-58:按下标值查找字符串示例。

在命令行窗口中输入:

String = 'Peter Piper picked a peck of pickled peppers. ';
findstr(String,' ')            % 搜索字符串内的空格位置

输出结果:

ans =
     6    12    19    21    26    29    37    46


在命令行窗口中输入:

findstr(String,'p')         % 搜索字母p

输出结果:

ans =
     9    13    22    30    38    40    41

在命令行窗口中输入:

findstr(String,'cow')         % 搜索单词cow

输出结果:

ans =
     []

在命令行窗口中输入:

findstr(String,'pick')         % 搜索单词pick


输出结果:

ans =
    13    30


提示:findstr函数对字母的大小写是敏感的。另外,findstr函数对字符串矩阵不起作用,因此对字符串矩阵的搜索只能通过循环索引矩阵内的元素实现。

字符串的替换可以通过对字符串数组中相应的元素直接赋值来实现,也可以使用strrep函数来实现。


2-59:替换字符串示例。

在命令行窗口中输入:

String = ' Peter Piper picked a peck of pickled peppers. ';
String(1:12) = ' Helen Smith'

输出结果:

String =
    ' Helen Smith picked a peck of pickled peppers. '


在命令行窗口中输入:

String = strrep(String,' Helen Smith',' Sabrina Crame')

输出结果:

String =
    ' Sabrina Crame picked a peck of pickled peppers. '


提示:直接赋值方法并不能使两个不同长度的字符串相互替换,而使用strrep函数可以替换两个任意长度的字符串。与findstr函数类似,strrep函数也对字符串矩阵不起作用。


2.4.4  字符串数值转换


MATLAB中还提供了大量字符串类型与数值类型之间的转换函数,如表2-26所示。

2-26  字符串类型与数值类型转换函数

函数名称

函数功能

abs

字符转换成ASCII

dec2hex

十进制数转换为十六进制字符串

fprindf

把格式化的文本写到文件中或显示屏上

hex2dec

十六进制字符串转换成十进制数

hex2num

十六进制字符串转换成IEEE浮点数

int2str

整数转换成字符串

lower

字符串转换成小写的

num2str

数字转换成字符串

setstr

ASCII转换成字符串

sprint

用格式控制数字转换成字符串

sscanf

用格式控制字符串转换成数字

str2mat

字符串转换成一个文本矩阵

str2num

字符串转换成数字

upper

字符串转换成大写的


2-60:将数值嵌入字符串示例。

在命令行窗口中输入:

rad = 2.5;area = pi * rad ^ 2;
string = [' A circle of radius ' num2str(rad) ' has an area of ' num2str(area) ' . '];
disp(string)

输出结果:

A circle of radius 2.5 has an area of 19.635 .



本章小结


本章介绍了MATLAB的基础知识及一些基本编程的句法形式和函数的使用方法,对MATLAB中的数据类型、矩阵的基本操作、运算符和字符串处理函数分别进行了举例说明,其中矩阵、函数句柄和结构体等内容后续还有更详细的介绍。本章的重点是数值、字符串等的各种操作及相互之间的转换,读者还应熟练掌握各个运算符的运算法则及优先级。


相关文章
|
2月前
|
安全 算法框架/工具 Python
使用雅可比椭圆函数为Reissner平面有限应变梁提供封闭形式解(Matlab代码实现)
使用雅可比椭圆函数为Reissner平面有限应变梁提供封闭形式解(Matlab代码实现)
|
3月前
|
算法 机器人 定位技术
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
112 0
|
2月前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
109 5
|
2月前
|
数据采集 新能源 调度
【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)
【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)
127 4
|
2月前
|
Serverless Python
【三变量联合分布函数copula】利用AIC BIC确定单变量最优拟合函数、利用AIC确定三变量联合最优copula函数、计算联合概率(Matlab代码实现)
【三变量联合分布函数copula】利用AIC BIC确定单变量最优拟合函数、利用AIC确定三变量联合最优copula函数、计算联合概率(Matlab代码实现)
271 4
|
2月前
|
存储 编解码 并行计算
【快速傅里叶变换FFT、窗函数法、希尔伯特-黄变换、小波变换】电力系统同步相量计算研究(Matlab代码实现)
【快速傅里叶变换FFT、窗函数法、希尔伯特-黄变换、小波变换】电力系统同步相量计算研究(Matlab代码实现)
154 6
|
2月前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
123 1
|
3月前
|
算法 Java 计算机视觉
【图像去模糊】非盲去模糊实景图像处理,使用点扩散函数(PSF)快速去除实景图像中的模糊(Matlab代码实现)
【图像去模糊】非盲去模糊实景图像处理,使用点扩散函数(PSF)快速去除实景图像中的模糊(Matlab代码实现)
283 2
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
131 0
|
3月前
|
算法 Python
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
121 0

热门文章

最新文章