Matlab 中的字符(char)和字符串(string)

目录

一、数据类型定义:向量(char)vs 变量(string)

二、不同之处

1. 字符和字符串的串联:[ ] 或 strcat( ) 

 2. 多行数组:用分号(;)或换行完成

 3. 字符串中输入单引号

4. 重复出现的元素

4.1 repmat() 实现字符串重复 

4.2 同已有数组“拼接”时可以不使用 repmat()

 4.3 如果希望每行元素可以不同,就要避免使用 num2str 类的函数

5. char 数组如何转为 cell 数组

5.1 num2cell(A,dim) 指定 dim

5.2 直接用函数 cellstr()

三、更多实际应用

3.1 获取字符串中的数字

四、相关函数

创建

比较

查找替换

引用


一、数据类型定义:向量(char)vs 变量(string)

Matlab 中可以通过一对单引号或一对双引号来创建字符(char)或字符串(string)。

 字符变量(char)可以被当做一个由字符组成的一维向量,字符串(string)则是一个变量。利用 char() 和 string() 函数可以对字符串和字符变量相互转换。[1]

二、不同之处

在很多情况下两者可以互换,下面主要关注两者应用的不同之处。

1. 字符和字符串的串联:[ ] 或 strcat( ) 

可以直接用左右方括号([])对字符(char)进行串联,对字符串(string)的串联则需要用到函数 strcat( ) 。因为字符串是一个变量,用方括号串联只能得到m x n 字符串数组或向量。

 

 2. 多行数组:用分号(;)或换行完成

需要注意:直接生成字符(串)数组时,char 数组每一行的个数必须相同,string 数组则不需要。(为什么说 “直接生成”,因为在使用函数 str2mat 创建字符(串)数组的时候,不用担心每一行的字符个数是否相等,函数在运行中会以字符最多的一行为准,而将其他行中的字符以空格补齐。可见本节第 4 点示例中的对比。)[2]

 3. 字符串中输入单引号

两个单引号相当于一个单引号,但只能用' ''right'' '(char),不能用 " ''wrong'' "(string)

4. 重复出现的元素

4.1 repmat() 实现字符串重复 

实际工作中经常遇到一系列字符串有重复出现的固定片段,这时就可以用 repmat() 函数来简化表达。下面给出几个例子:

4.2 同已有数组“拼接”时可以不使用 repmat()

string: 前两个例子(string 数组情况下)不用 repmat() 函数所得结果相同。即也可以写成:

strcat("N",string([1:11]'))
strcat('N',string([1:11]'))
strcat("N",num2str([1:11]'))

char: 补充一些 code 例子,不用 repmat() 也可以实现 char 数组的重复,并可以指定数字格式 @20230617

 4.3 如果希望每行元素可以不同,就要避免使用 num2str 类的函数

  1. 直接组合字符串
  2. 用 for 循环(对不支持字符串的部分版本)

5. char 数组如何转为 cell 数组

能构建 string 变量的时候直接转换为 cell 就可。但有些 matlab 版本不支持 string(比如 2016),就需要将 char 转换为 cell。

5.1 num2cell(A,dim) 指定 dim

对于上述 char 数组,直接转为 cell 结果如下,显然第一种不是我们所希望的。 

C = num2cell(A) 将数组转换为相同大小的元胞数组。
C = num2cell(A,dim) 通过指定 dim,可以对 A 按照特定维度划分。dim 可以是维度的标量或者向量,更具体应用可见 matlab 官方帮助文档[3]。

5.2 直接用函数 cellstr()

C = cellstr(A) 将 A 转换为字符向量元胞数组。输入数组 A 可以是字符数组或分类数组,从 R2016b 开始,也可以是字符串数组。

三、更多实际应用

3.1 获取字符串中的数字

找到两种方法。第一种可以只能详细的 'match' 条件进行精细选择,比如:如何从这样的字符串中提取数字 – MATLAB中文论坛 (ilovematlab.cn)

四、相关函数

字符串相关函数简表

创建

strcat字符串组合
strvcat竖直方向字符串组合
repmat重复

比较

strcmp判断两个字符串是否相等。
strncmp判断两个字符串的前n个字符是否相等。
strcmpi和strncmpi分别与strcmp和strncmp相同,只是在比较的过程中忽略了字母大小写。

查找替换

findstr返回某一子串在整个字符串中的开始位置
strrep一般的字符串查找与替换
strmatch查找符合要求的行
strtok查找某个字符最先出现的位置

引用

[1]MATLAB中字符变量(char)和字符串变量(string)的异同_TifLil的博客-CSDN博客_matlab字符串变量

[2] MATLAB字符和字符串 - 简书 (jianshu.com)

[3]  将数组转换为相同大小的元胞数组 - MATLAB num2cell - MathWorks 中国

  • 25
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值