三、 字符串


在 MATLAB 中,有两种基本的数据类型,一个是数值型数据,一个是字符型数据或称字符串数据。

数值型数据比较好理解,是指能参与数值运算的数据,又分为整型、浮点型和复数型。


字符型数据在日常应用中则不太强调,但却是大量存在的,例如统计一篇英文文章中不同英文字母出现的次数,按姓名排序,等等。字符串数据由若干个字符组成,这些字符可以是计算机系统中允许使用的任何字符。


1. 字符串的表示

  • 在 MATLAB 中,字符串是单引号括起来的字符序列。
>> x='yan zi 22'
    'yan zi 22'

若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

>> 'I ''m a student.'
ans =
    'I 'm a student.'

MATLAB 将一个字符串当作一个行向量,每个元素对应一个字符,其引用方法和数值向量相同。

>> A='ABCDEF';
>> A(1:3)
ans =
    'ABC'

也可以建立多行字符串,形成字符串矩阵。

>> A=['abcdef';'123456'];
>> A(2,3)
ans =

需要注意的是,这里要求各行字符数要相等。为此,有时不得不用空格来调节各行的长度,使它们彼此相等。

例如,我们建立一个字符串向量,然后对该向量做如下处理。

(1) 取第 1~5 个字符组成的子字符串。

(2) 将字符串倒过来重新排列。

(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。

(4) 统计字符串中小写字母的个数。

>> A='ABc123d4e56Fg9';
>> A1=A(1:5)
    'ABc12'
>> A2=A(end:-1:1)
    '9gF65e4d321cBA'
>> k=find(A>='a'&A<='z');
>> A(k)=A(k)-('a'-'A')
    'ABC123D4E56FG9'
>> length(k)
ans =

2. 字符串的操作

2.1 字符串的执行



其中,s 是字符串。

2.2 字符串与数值之间的转换

2.3 字符串的连接



2.4 字符串的比较


字符串比较函数用于判断字符串是否相等,有 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) strnempi(s1,s2,n):在忽略字符串大小写前提下,比较前 n 个字符是否相等,如果相等,返回 1,否则返回 0。

2.5 字符串的查找与替换

>> p3=strrep('this is a test','test','success')
    'this is a success'

四、结构数据与单 元数据


  • MATLAB 新增加了两种数据类型:结构数据类型和单元数据类型。
  • 这两种数据类型均是将不同的相关数据集成到一个单-的变量中,使得大量的相关数据的处理
    与引用变得简单、方便。


1. 结构数据


  • 个人感觉可以参考 C++ 中的结构体。
  • 结构数据类型把一组类型不同而逻辑上相关的数据组成一个有机的整体,以便于管理和引用。例如要存储学生的基本信息就可采用结构数据类型。


1.1 结构数据的建立与引用

  • 结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。建立一个结构矩阵可以采用给结构成员赋值的办法,其格式如下:
    结构矩阵名.成员名=表达式

其中,表达式应理解为矩阵表达式。例如,我们要建立含有 3 个元素的结构矩阵 a,命令如下:

>> a(1).x1=10;a(1).x2='liu';a(1).x3=[11,21;34,78];
>> a(2).x1=12;a(2).x2='wang';a(2).x3=[34,191;27,578];
>> a(3).x1=14;a(3).x2='cai';a(3).x3=[13,180;57,231];
  • 这里需要注意的是,结构矩阵元素的成员也可以是结构数据。
>> a(2).x1.x11=90;a(2).x1.x12=12;a(2).x1.x13=30;


  • 以上建立的结构矩阵 a 含有 3 个元素,每个元素又含有 3 个成员,成员 a(2).x1 又是含有 3 个成员的结构数据。
  • 对结构数据的引用,可以引用其成员,也可以引用结构矩阵的元素或结构变量。
 >> a(2).x3
ans =
    34   191
    27   578
ans = 
  包含以下字段的 struct:
    x1: 12
    x2: 'wang'
    x3: [2×2 double]
  包含以下字段的 1×3 struct 数组:

引用结构矩阵元素的成员时,显示其值。引用结构矩阵元素时,显示成员名和它的值,但成员是矩阵时,不显示其具体内容,只显示成员矩阵大小参数。引用结构矩阵时,只显示结构矩阵的大小参数和成员名。


1.2 结构成员的修改

  • 可以根据需要增加或删除结构的成员。例如,我们要给结构矩阵 a 增加一一个成员 x4, 可给 a 中任意一个元素增加成员 x4,命令如下:


>> a(1).x4='410075';
  • 但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。
  • 要删除结构的成员,则可以使用 rmfield 函数来完成。例如,要删除成员 x4,命令如下:
>> a=rmfield(a,'x4');


2. 单元数据


  • 单元数据类型与结构数据类型类似,也是把不同属性的数据放在一个变量中。不同的是,结构矩阵的各个元素下有成员,每个成员都有自己的名字,对成员的引用如下:
结构矩阵名.成员名


  • 而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。
  • 建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。
>> a={10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]}
  3×3 cell 数组
    {[10]}    {'liu' }    {2×2 double}
    {[12]}    {'wang'}    {2×2 double}
    {[14]}    {'cai' }    {2×2 double}

可以用带有大括号下标的形式引用单元矩阵元素。

>> a{3,3}
ans =
    13   890
    67   231
  • 单元矩阵的元素可以是结构或单元数据。例如,我们先建立结构变量 y,给上面建立的单位矩阵 a 的元素 a{3,4} 赋值,命令如下:
>> y.x1=34;y.x2=56;
>> a{3,4}=y;


可以使用 celldisp 函数来显示整个单元矩阵,如 celldisp(a)。还可以删除单元矩阵中某个元素,如删除 a 的第 3 个元素,其命令如下:

>> a(3)=[]
  1×11 cell 数组
  列 1 至 8
    {[10]}    {[12]}    {'liu'}    {'wang'}    {'cai'}    {2×2 double}    {2×2 double}    {2×2 double}
  列 9 至 11
    {0×0 double}    {0×0 double}    {1×1 struct}

单元矩阵 a 的第 3 个元素被删除侯,a 变成行向量。这里需要注意的是,这里是 a(3),而不是 a{3}。a{3}=[] 是将 a 的第 3 个元素置为空矩阵,而不是删除它。

【发电厂】发电厂模型验证应用于电网事件在线性能监测【相量测量单元 (PMU) 数据对电网事件的在线性能监控】研究(Matlab&Simulink实现)
【发电厂】发电厂模型验证应用于电网事件在线性能监测【相量测量单元 (PMU) 数据对电网事件的在线性能监控】研究(Matlab&Simulink实现)
MATLAB 之 M 文件和程序控制结构(顺序、选择、循环)-2
循环结构的基本思想是重复,即利用计算机运算速度快以及能进行逻辑控制的特点,重复执行某些语句,以满足大量的计算要求。
MATLAB 之 M 文件和程序控制结构(顺序、选择、循环)-1
M 文件是由若干 MATLAB 命令组合在一起构成的程序,其扩展名为 .m。它可以完成某些操作,也可以实现某种算法。实际上,MATLAB 提供的内部函数以及各种工具箱,都是利用 MATLAB 命令开发的 M 文件。
【GRU回归预测】基于贝叶斯网络以后卷积神经网络结合门控循环单元CNN-GRU实现数据多维输入单输出预测附matlab代码
【GRU回归预测】基于贝叶斯网络以后卷积神经网络结合门控循环单元CNN-GRU实现数据多维输入单输出预测附matlab代码
时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比)
时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比)
[-] .\Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are suppressed. Patch abort!HI