二、MATLAB基础知识
(六)字符串
- 字符串的创建和简单操作
- 用单引号对括起来的一系列字符的组合,每个字符是一个元素,通常通过两个字节来存储
- 表2-22 字符串常见操作函数(e_two_37.m)
函数 | 说明 |
size | 查看字符串的大小 |
whos | 可以查看工作空间内的所有变量,包括字符串的详细信息 |
double,abs | 查看字符串的ASCⅡ值大小 |
char | 将字符串的ASCⅡ值转化为字符,生成字符串数组 |
disp | 显示字符串的内容 |
strvcat | 生成字符串数组,忽略输入的空字符 |
strcat | 如果字符串行数相同,水平方向连接字符串,较短的补充空格保证相等 |
deblank | 消除所提取字符串中的空格符号 |
-
- 表2-23 数字和字符串转换函数(e_two_38.m)
函数 | 说明 |
int2str | 将整数数组转换为字符数组 |
num2str | 将非整数数组转换为字符数组 |
mat2str | 将输入转换为MATLAB的输入语法形式 |
fprintf | 将数值转化为ASCⅡ字符格式,输出到指定数据文件,否则输出到命令窗口中显示 |
sprintf | 和fprintf函数一样,生成一个字符串数组 |
sscanf | 和fprint的操作相反,根据格式指示符从字符串中读取数据 |
str2num | 可以实现字符串到数字的转换,但是转化效率稍低。如果字符串中包含变量名,那么不能进行转换 |
str2double | 将一个字符串转化为一个双精度数值,限制数值的范围 |
-
- 表2-24 数值数据的格式
函数命令 | 输出结果 | 说明 |
sprintf('%.5e',sqrt(5)) | 2.23607e+000 | 科学计数法,%.xe表示小数点后x位小数 |
sprintf('%.5f',sqrt(5)) | 2.23607 | 浮点数表示,%.xf表示小数点后x位小数 |
sprintf('%.5g',sqrt(5)) | 2.2361 | e和f格式表示的数据中位数较小者,%.xg表示x位有效数字表示 |
sprintf('%8.5g',sqrt(5)) | 2.2361 |
格式中,%y.xg,y表示数值格式的宽度为y位,小数点后保留x位数据, 如果小数点后的位数超过数值格式的宽度,则忽略小数点位数的显示 |
-
- 表2-25 字符串比较和判断函数
函数 | 说明 |
ischar(s) | 判断s是否是字符串,返回逻辑值true或false |
iscellstr(s) | 判断c是否是字符串单位数组,返回逻辑值true或false |
isletter(s) | 判断s是否是字母,返回逻辑值true或false |
isspace(s) | 判断s是否是空格,返回逻辑值true或false |
isstrprop(s, 'property') | 判断s是否为给定属性,返回逻辑值true或false |
strcmp(s1,s2) | 判断两个字符串s1和s2是否相同,返回true或false |
strncmp(s1,s2,n) | 判断两个字符串s1和s2的前n个字符是否相同,返回true或false |
strncmpi(s1,s2) | 判断两个字符串是否相同(忽略大小写),返回true或false |
strncmpi(s1,s2,n) | 判断两个字符串前n个字符是否相同(忽略大小写),返回true或false |
findstr(s1,s2) | 在字符串s1中查找较短的字符串s2 |
strfind(s1,s2) | 在字符串s1中查找字符串s2 |
strjust(s1,type) | 按指定的type方式来调查字符串数组 |
strmatch(s1,s2) | 查找符合要求的字符串下标 |
- 正则表达式搜索字符串
- 表2-26 查找单个字符串的表达式
正则表达式 | 说明 |
. | 查找任意单个字符,包括空格 |
[] | 查找方括号内给出的字符和数字 |
[a-zA-Z] | 查找任意的字母和字母组合,包括大小写字母,-表示范围 |
[^aeiou] | 查找除方括号内字符串的所有字符,^表示取集合的反 |
s | 查找所有的空白字符,相当于[ fv] |
S | 查找任意非空白字符,相当于[^ fv] |
w | 查找任意的文字符号,相当于[a-z_A-Z0-9] |
W | 查找任意的非文字符号,相当于[^a-z_A-Z0-9] |
d | 查找任意数字,相当于[0-9] |
D | 查找任意的非数字字符,相当于[^0-9] |
xN或x[N] | 查找十六进制的N字符 |
oN或o[N] | 查找八进制的N字符 |
a | 警告、提示或发声字符 |
查找退格字符 | |
查找横向制表符 | |
查找换行符 | |
v | 查找纵向制表符 |
f | 查找换页符 |
查找回车符号 | |
e | 查找退出符号 |
查找单个反斜杠后的字符,即查找具有特殊意义的字符 |
-
- 表2-27 正则表达式的字符修正符
字符修正符 | 说明 |
? | 查找零次或一次此修正符前匹配元素的字符 |
* | 查找零次或多次此修正符前匹配元素的字符 |
+ | 查找一次或多次此修正符前匹配元素的字符 |
{n,m} | 查找n次此修正符号前匹配元素的字符,但次数不超过m次 |
-
- 表2-28 逻辑操作符号
逻辑操作符 | 说明 |
(p) | 符合括号内表达式的所有字符 |
p|q | 查找符合p或q表达式的字符 |
^p | 查找出现在字符串开始位置、满足表达式p的字符串 |
p$ | 查找出现在字符串末尾、满足表达式p的字符串 |
<p | 查找出现在单词开始位置、符合表达式p的字符串 |
>p | 查找出现在单词末尾、符合表达式p的字符串 |
-
- 表2-29 MATLAB的标记表达式
标记表达式 | 说明 |
(p) | 查找符合表达式p的所有字符 |
(?:p) | 将符合表达式p的字符串组合在一起,但不保存在一个标记中 |
(?>p) | 逐个元素进行组合,但不保存在一个标记中 |
(?#A Comment) | 在表达式中插入注释 |
N | 与表达式中的第N个标记相同 |
$N | 在一个替换字符中插入一个与第N个标记相匹配的字符串 |
(?<name>p) | 查找符合表集中表达式p的所有字符,并命名为name |
k<name> | 与名为name的标记相匹配 |
(?(T)p) | 如果T标记已经产生,则查找符合p的字符串 |
(?(T)p|q) | 如果T标记已经产生,则查找符合p的字符串,否则查找符合q的字符串 |
-
- 3个和正则表达式相关的函数:regexp、regexpi和regexprep(e_two_39.m)
- repexp:表示使用正则表达式查找字符串
- regexpi:表示在查找时忽略大小写
- regexprep:表示用正则表达式查找并替换字符串
- 3个和正则表达式相关的函数:regexp、regexpi和regexprep(e_two_39.m)
(七)关系和逻辑运算
- 关系运算符
- 表2-30 关系运算符号(e_two_40.m)
关系运算符 | 说明 | 关系运算符 | 说明 |
< | 小于 | >= | 大于或等于 |
<= | 小于或等于 | == | 等于 |
> | 大于 | ~= | 不等于 |
- 逻辑运算符
- 表2-31 逻辑运算符(e_two_41.m)
逻辑运算符 | 说明 |
& | 在两个逻辑数组之间逐个元素进行逻辑与操作 |
| | 在两个逻辑数组之间逐个元素进行逻辑或操作 |
~ | 对一个逻辑数组进行取反操作 |
&& | 在标量表达式之间进行避绕式(Short circuiting)与操作 |
|| | 在标量表达式之间进行避绕式(Short circuiting)或操作 |
-
- 避绕式:标量表明在该逻辑表达式中只对标量关系才能使用。在执行逻辑判断时,如果第一表达式的逻辑结果已经可以用于确定整个式子的逻辑关系,那么后面的逻辑关系表达式中的标量表达式不再进行判断。
- 关系和逻辑函数
- 表2-32 关系和逻辑函数(e_two_42.m)
函数 | 说明 |
xor(x,y) |
逻辑异或函数,当x和y中一个为真,另一个为假时,函数返回true; 反之两者均为逻辑真或逻辑假时,返回false |
any(x) |
如果x是向量,当向量中的如果有一个元素为0,返回true; 如果x是数组,对每一列,如果有一个元素为0,返回true |
all(x) |
如果x是向量,当向量中的所有元素都为0时,返回true; 如果x是数组,对每一列,如果所有元素都为0,返回true |
-
- 表2-33 MATLAB检验函数(e_two_43.m)
函数 | 说明 |
ispc | 检测用户的MATLAB版本是否为pc版本 |
isstudent | 检测MATLAB版本是否为学生版本 |
isunix | 检测MATLAB版本是否为unix版本 |
ismember | 检测一个值或变量是否为某个集合中的元素 |
isglobal | 检测一个变量是否为全局变量 |
mislocked | 检测M文件是否被锁定(不能被消除) |
isempty | 检测一个矩阵是否为空矩阵 |
isequal | 检测两个数组是否相等 |
isequalwitheualnans | 检测两个数组是否相等,如果存在NaN,也认为相等 |
isfinite | 检测数组中的元素是否为有限值 |
isfloatpt | 检测数组中的元素是否为浮点数 |
isscalar | 检测一个变量是否为标量 |
isinf | 检测数组中是否存在无穷大数值 |
islogical | 检测一个数组是否为逻辑数组 |
isnan | 检测一个数是否为非数值(NaN) |
isnumeric | 检测一个数组是否为数组型数组 |
isreal | 检测一个数组是否为实数数组 |
isprime | 检测一个数是否为素数 |
issorted | 检测一个数组是否按顺序排列 |
automesh | 如果输入参数是不同方向的向量,则返回true |
inpolygon | 检测一个点是否在一个多边形区域内 |
isvarname | 检测一个变量名是否为合法的变量名 |
iskeyword | 检测一个变量名是否为MATLAB关键字 |
issparse | 检测一个矩阵是否为稀疏矩阵 |
isvector | 检测一个数组是否为向量 |
isappdata | 检测应用程序定义的数据是否存在 |
ishandle | 检测是否为图形句柄 |
ishold | 检测一个图形的hold状态是否为on |
figflag | 检测一个图形是否为当前屏幕上显示的图形 |
iscellstr | 检测一个数组是否为字符串单元数组 |
ischar | 检测一个数组是否为字符串数组 |
isletter | 检测一个字符是否为英文字母 |
isspace | 检测一个字符是否为空格 |
isa | 检测一个对象是否为指定的类型 |
iscell | 检测一个数组是否为单元数组 |
isfield | 检测一个名称是否为结构体中的域 |
isjava | 检测一个数组是否为java对象数组 |
isobject | 检测一个对象是否为一个对象 |
isstruct | 检测一个名称是否为结构体 |
isvalid | 检测一个对象是否可以连接到硬件的串行端口对象 |