3.字符和字符串

在MATLAB中,几个字符(Character)可以构一个字符串(String)。一个字符串被视为一个行向量,而字符串中的每一个字符(含空格符),则是以其ASCII的形式存放于此向量的每一个元素中,只是它的外显形式仍然是可读的字符。字符串类型在数据的可视化、应用程序的交互方面有着非常重要的作用。

3.1 创建字符串

1.一般字符串的创建

在MATLAB中,所有的字符串都用两个单引号括起来,进行输入赋值。如在MATLAB命令窗口中输入:

>> a='matlab'

a =

matlab

字符串的每个字符(空格也是字符)都是相应矩阵的一个元素,上述变量a是1×6阶的矩阵,可以用size(a)命令查得:

>> size(a)

ans =

1     6       %  1行6列

2.中文字符串的创建

中文也可以作为字符串的内容。但需要注意的是:在中文字符串的输入过程中,两边的单引号必须是英文状态的单引号。例如:

>> A='中文字符串输入演示'

A =

中文字符串输入演示

3.字符串的寻访

在MATLAB中,字符串的寻访可以通过其坐标来实现。在一个字符串中,MATLAB按照从左至右的顺序对字符串中的字符依次编号(1,2,3,…)。进行字符串的寻访,只需要像寻访一般矩阵那样即可。例如在前面创建了中文字符串A之后可以得到:

>> A(3:5)

ans =

字符串

4.字符串数组的创建

二维字符串(数组)的建立也非常简单。可以像数值数组的建立那样直接输入,也可以使用str2mat等函数建立。

【例3-6】  多行串数组的直接输入示例。

>> clear

>> S=['This string array '

'has multiple rows.']

S =

This string array

has multiple rows.

>> size(S)

ans =

2    18

需要注意的是:在直接输入多行字符串数组的时候,每一行的字符个数必须相同。

【例3-7】  使用函数str2mat创建多行串数组示例。

>> a=str2mat('这','字符','串数组','','由5 行组成')

a =

字符

串数组

由5 行组成

>> size(a)

ans =

5    6

在使用函数str2mat创建字符串数组的时候,不用担心每一行的字符个数是否相等,函数在运行中会以字符最多的一行为准,而将其他行中的字符以空格补齐。

3.2  字符串比较

在MATLAB中,有多种对字符串进行比较的功能:

(1)比较两个字符串或者子串是否相等;

(2)比较字符串中的单个字符是否相等;

(3)对字符串内的元素分类,判断每个元素是否是字符或者空格。

用户可以使用下面4个函数中的任意一个,来判断两个输入字符串是否相等。

(1)strcmp:判断两个字符串是否相等。

(2)strncmp:判断两个字符串的前n个字符是否相等。

(3)strcmpi和strncmpi:这两个函数的作用分别与strcmp和strncmp相同,只是在比较的过程中忽略了字母大小写。

考虑有这两个字符串:

>>str1 = 'hello';

>>str2 = 'help';

字符串str1和str2并不相等,所以使用strcmp函数来判断的话,将会返回逻辑0(false)。例如:

>>C = strcmp(str1,str2)

C =

0

由于字符串str1和str2的前3个字符相等,所以用strncmp函数来比较前3个以内字符,将会返回逻辑1(true)。例如:

>>C = strncmp(str1, str2, 2)      %  比较前两个字符

C =

1

下面介绍如何对大小写不同的情况进行比较。

>> str3 = 'Hello';

>> D = strncmp(str1, str3,2)                % 对大小写敏感

D =

0

>> F = strncmpi(str1, str3,2)               % 对大小写不敏感

F =

1

用户可以使用关系运算符进行字符串的比较,只要比较的数组具有相同的尺寸,或者其中一个是标量即可。例如,可以使用(==)运算符来判断两个字符串中有哪些字符相等。

>>A = 'fate';

>>B = 'cake';

>>A == B

ans =

0   1  0   1

所有的关系运算符都可以用来比较字符串相对应位置上的字符。

3.3字符串查找与替换

MATLAB提供了很多函数供用户进行字符串的查找与替换。更加强大的是,MATLAB也支持在字符串的查找与替换中使用正则表达式。通过灵活使用正则表达式,可以对字符串进行各种形式的查找与替换。至于正则表达式的应用,用户可以查询帮助文档中的Regular Expressions部分。

【例3-8】  使用strrep函数进行字符串查找替换示例。

考虑有这样一个标签:

>> label = 'Sample 1, 03/28/15'

label =

Sample 1, 03/28/15

函数strrep用于实现一般的查找与替换功能。本例中使用strrep函数,将日期从'03/28'替换为'03/30'。命令如下:

>> newlabel = strrep(label, '28', '30')

newlabel =

Sample 1, 03/30/15

【例3-9】  使用findstr函数进行字符串查找示例。

findstr函数用于返回某一子串在整个字符串中的开始位置。例如在字符串中查找字母a和oo出现的位置,可以使用如下命令:

>> strtemp='have a good time!'

strtemp =

have a good time!

>> position1= findstr('a', strtemp)

position1 =

2     6

>> position2 = findstr('oo', strtemp)

position2 =

9

从本例可以看出,字母a出现在第2和第6两个位置,这说明findstr函数返回的位置信息包括所有出现的子串的位置。而字母'oo'字串只出现了一次,所以只返回一个位置信息。

strtok函数用于返回分隔字符第1次出现之前的字符。如果不自行指定分隔字符,默认的分隔字符则是泛空格符字符,因此用户可以使用strtok函数将一个句子按照单词分开。

【例3-10】  使用strtok函数进行字符串查找示例。

>> t='I have walked out on a handful ofmovies in my life.';  %  测试字符串

>> remain = t;

>> while true                                               % 使用while循环结构

[str, remain] = strtok(remain);                          %  以默认的空格为分隔符查找

if isempty(str), break;  end                          %  循环跳出控制

disp(sprintf('%s', str))                                %  显示结果

end

以下就是使用strtok函数进行多次查找得到的结果:

I

have

walked

out

on

a

handful

of

movies

in

my

life.

函数strmatch用于查找一个字符数组中以指定子串开始的字符串,该函数返回的是以指定子串开始的行编号。

【例3-11】  使用strmatch函数进行字符串查找示例。

>> maxstrings = strvcat('max', 'minimax','maximum') %  测试字符串数组

maxstrings =

max

minimax

maximum

>> strmatch('max', maxstrings)       %  在测试字符串数组中查找以max开头的字符串

ans =

1

3

在本例中第二行minimax虽然也包含max子串,但是这个子串的并不是以max开始的,所以在查找过程中没有返回第2行为结果。

3.4 类型转换

在MATLAB中允许不同类型的数据和字符串类型的数据之间进行转换,这种转换需要使用不同的函数完成。另外,同样的数据,特别是整数数据,有很多种表示的格式,例如十进制、二进制或者十六进制。在C语言中,需要使用printf函数通过相应的格式字符串就可以输出不同格式的数据。而在MATLAB中,则直接提供了相应的函数可以完成数制的转换。表3-2和表3-3分别列举了这些函数。

表3-2       数字与字符串之间的转换函数函     数说    明函    数说    明

num2str将数字转换为字符串str2num将字符串转换为数字

int2str将整数转换为字符串sprintf格式化输出数据到命令行窗口

mat2str将矩阵转换为eval函数可以使用的字符串sscanf读取格式化字符串

str2double将字符串转换为双精度类型的数据

表3-3       不同数值之间的转换函数函    数说    明函    数说    明

hex2num将十六进制整数字符串转换为双精度数据dec2bin将十进制整数转换为二进制整数字符串

hex2dec将十六进制整数字符串转换为十进制数据base2dec将指定数制类型的数字字符串转换为十进制整数

dec2hex将十进制数据转换为十六进制整数字符串dec2base将十进制整数转换为指定数制类型的数字字符串

bin2dec将二进制整数字符串转换为十进制整数

在表3-2列举的数字与字符串之间的转换函数中,常用的是num2str和str2num。这两个函数在MATLAB的图形用户界面编程中应用较多。

【例3-12】  num2str和str2num函数用法实例。

>> a=['1 2';'3 4']        % 创建一个字符串数组

a =

1 2

3 4

>> b=str2num(a)        % 将字符串转换为数值形式

b =

1     2

3     4

>> c=str2num('1+2i')         % 将字符串转换为数值形式

c =

1.0000 +2.0000i

>> d=str2num('1 +2i')         % 将字符串转换为数值形式

d =

1.0000 +0.0000i   0.0000 + 2.0000i>>e=num2str(rand(3,3),6)         %  将数值转换为字符串形式

e =

0.814724    0.913376     0.278498

0.905792    0.632359     0.546882

0.126987   0.0975404     0.957507

>> whos

Name      Size            Bytes  Class    Attributes

a         2x3                12  char

b         2x2                32  double

c         1x1                16  double   complex

d         1x2                32  double   complex

e         3x35              210  char

本例中转换生成变量c和d时得到了不同的结果,主要原因是在变量d中,数字 “1”和字符“+2i”之间存在空格,而加号“+”和数字“2”之间没有空格,所以转换的结果与生成变量c时不同,创建变量c的时候,在数字“1”、加号“+”和数字“2”之间都存在空格。为了避免出现上述问题,可以使用str2double函数,但是该函数仅能转换标量,不能转换矩阵或者数组。

使用num2str函数将数字转换为字符串时,可以指定字符串所表示的有效数字位数,详细信息可以查阅MATLAB的help文档。

3.5  字符串应用函数小结

MATLAB主要以矩阵计算闻名于世,除此以外该软件在字符串处理方面也提供了一系列非常强大的函数。表3-4对常用字符串函数进行了分类小结。

表3-4       字符串函数函    数说    明

字符串创建函数'str'由单引号(英文状态)创建字符串

blanks创建空格字符串

sprintf将格式化数据写入字符串

strcat字符串组合

strvcat竖直方向字符串组合

字符串修改函数deblank删除尾部空格

lower将所有字符小写

sort将所有元素升序或降序排列

strjust字符串对齐

strrep字符串替换

strtrim删除开始和尾部的泛空格符

upper将所有字符大写

字符串的读取和操作eval将一个字符串作为MATLAB命令执行

sscanf格式读入字符串

续表函    数说    明

字符串查找替换函数findstr查找子串

strcmp字符串比较

strcmpi字符串比较,忽略大小写

strmatch查找符合要求的行

strncmp比较字符串的前N个字符

strncmpi比较字符串的前N个字符,忽略大小写

strtok查找某个字符最先出现的位置

matlab字符和字符串,MATLAB字符和字符串相关推荐

  1. matlab字符衔接,matlab字符串连接(多个字符串)的经验,matlab字符串

    matlab字符串连接(多个字符串)的经验,matlab字符串 参考 matlab中字符串连接的3种方法  文章,实验遇到的一些小白问题,如有问题希望大神们给予指导. Matlab中,两个或多个字符串 ...

  2. MATLAB学习笔记04—MATLAB的字符与字符串类型

    MATLAB学习笔记 第4章字符和字符串类型 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MATLAB学习笔记 一.字符串属性示例 二.字符串数组的索引 三.字符串中的 ...

  3. matlab 数值格式转换,Matlab字符串转换及数值格式转换

    Matlab字符串转换及数值格式转换 字符串转换函数 abs 字符串到ASCII转换 dec2hex 十进制数到十六进制字符串转换 fprintf 把格式化的文本写到文件中或显示屏上 hex2dec ...

  4. matlab yticklable,Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings)

    Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings) 我有一个情节: x = [0 1 2 3]; y = [0 0 1 1]; ...

  5. matlab l 汉字字符串,Matlab 字符串处理

    MATLAB字符串数组的创建与运算 字符串数组主要用于可视化编程内容,如界面设计和图形绘制. 1.字符串变量的创建 字符变量的创建方法是:在指令窗口中先把待建的字符放在"单引号对" ...

  6. matlab l 汉字字符串,MATLAB字符串

    MATLAB字符串 在MATLAB中,创建一个字符串是相当简单.事实上,我们已经用了很多次.例如,在命令提示符处输入以下: my_string='Tutorial''s Yiibai' MATLAB ...

  7. matlab连接两个字符串,matlab字符串连接(多个字符串)的经验

    参考 matlab中字符串连接的3种方法  文章,实验遇到的一些小白问题,如有问题希望大神们给予指导. Matlab中,两个或多个字符串连接常用的三种方法,如下: 背景知识: 1.char 和 str ...

  8. matlab中字符串,MATLAB字符串数组

    4.1.1 字符串入门 [ * 例 4.1.1 -1 ]先请读者实际操作本例,以体会数值量与字符串的区别. clear %清除所有内存变量 a=12345.6789 % 给变量 a 赋数值标量 cla ...

  9. matlab stract结构_6. matlab入门——结构体、元胞数组、字符串

    1.结构体 (1)使用赋值方法创建结构体 %% 使用赋值方法创建结构体 person(1).name = '张三'; person(1).weight = 66; person(1).length = ...

最新文章

  1. 浅谈算法和数据结构: 五 优先级队列与堆排序
  2. python xpath语法-python xpath 基本用法
  3. ubuntu 安装 spconv
  4. Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time)...
  5. MySQL教程(三)—— MySQL的安装与配置
  6. POJ 3087 Shuffle'm Up (模拟+map)
  7. 【深度学习系列】——深度学习简介
  8. 这家公司疑被查封、员工被带走,股东李笑来称“做天使投资人真不容易”
  9. nodejs版本更新问题:express不是内部或外部命令
  10. PyTorch 深度学习:32分钟快速入门——ResNet
  11. PHP中COOKIE即时生效,php实现cookie即时生效
  12. java spring server_java server之spring中的IOC如何用java实现?
  13. 【java】照片查看器:开发一个简易照片查看器,自行设计功能和界面。
  14. 人脸识别摄像头与普通摄像头的区别
  15. 【协议】LLDP、ARP、STP、ICMP协议
  16. 倒杨辉三角4行c语言,倒杨辉三角
  17. 思科关闭日志_思科交换机日志管理
  18. D3.js入门基础教程
  19. matlab画图五角星标记,Matlab---画图线型、符号及颜色
  20. Soft-Clipping Mish激活函数

热门文章

  1. 基于TableStore构建简易海量Topic消息队列
  2. Service Mesh微服务熔断、限流的骚操作
  3. Gartner:70%新应用由低代码开发,AI热潮后小数据崛起
  4. 重磅!中国网络空间安全协会发布《2020年中国网络安全产业统计报告》
  5. Spark精华问答 | spark性能优化方法
  6. Spring精华问答 | 什么是Spring inner beans?
  7. 关于这道填空题,你会如何回答?(附带学习链接)
  8. mysql如何创建用户代码_MySQL创建用户与受权方法_mysql
  9. python动态类型的坑_python进阶教程之动态类型详解
  10. python读取单元格部分内容_Python提取表格一定区域的内容