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

本文详细解析了Matlab中字符(char)与字符串(string)的区别与联系,包括它们的创建方式、串联方法、多行数组处理及转换技巧。此外还介绍了获取字符串中的数字等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、数据类型定义:向量(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重复

创建(提取/移除)

extract

S = extract(STR, PAT_STR)

S = extract(STR, PAT_POS)

S = extract(STR, PAT_PAT)

extractAfter

extractBefore
extractBetween
eraseNEWSTR = erase(STR,PAT)
eraseBetween

NOTE:

STR must be text, which means it can be a string array, a character vector, or a cell array of character vectors.

PAT must be text or a pattern array.

比较

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

查找替换

findstr返回某一子串在整个字符串中的开始位置
strrep一般的字符串查找与替换
strmatch查找符合要求的行
strtok查找某个字符最先出现的位置
replaceNEWSTR = replace(STR,PAT,NEW)

引用

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

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

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

[4] Matlab扫盲小短篇23:字符串的提取、替换、插入和删除 - 哔哩哔哩

### 回答1: 在 Matlab 中,可以使用 string 函数将 char 转换为 string。例如: str = "Hello"; string_var = string(str); 或者 str = 'Hello'; string_var = string(str); 这样就可以将变量 str 从 char 类型转换为 string 类型。 ### 回答2: 在使用 MATLAB 进行数据处理分析时,可能会遇到将字符类型(char)转换为字符串类型(string)的需要。下面是 charstring 的方法: 一、使用 string 函数 MATLAB R2016b 及更高版本提供了一种直接将 charstring 的函数,即 string() 函数。使用这个函数可以将 char 数组或单个 char 元素转换为一个字符串类型。代码如下: ```matlab A = 'Hello,World!'; % 定义一个 char 数组 B = string(A); % 将 A 转换为 string 类型 C = string('Hello');% 将单个 char 元素转换为 string 类型 ``` 二、使用 num2str 函数 除了使用 string() 函数之外,还可使用 num2str() 函数将 char 转换为 string 类型。需要注意的是,这个函数只能将 char 数组转换为一个字符串类型,无法转换单个 char 元素。代码如下: ```matlab A = 'Hello,World!'; % 定义一个 char 数组 B = num2str(A); % 将 A 转换为 string 类型 ``` 需要注意的是,num2str() 函数会将 char 数组中的非数字元素转换为一个空格。在后续处理中如果不需要这个空格,需要自行去除。 三、使用sprintf 函数 sprintf 函数可以将一个 char 数组转换为一个格式化的字符串,使用方式如下: ```matlab A = 'Hello,World!'; % 定义一个 char 数组 B = sprintf('%s', A);% 将 A 转换为 string 类型 ``` 需要注意的是,采用这种方式转换的字符串可能会有一些额外的空格或换行符,需要根据具体情况进行处理。 以上就是 charstring 的三种方法,需要根据具体情况选择合适的方式。 ### 回答3: MATLAB中的字符数组char可以通过不同的方式转换为字符串string。 一种简单的方法是使用mat2str函数。mat2str函数可以将一个数组转换为字符串表示,将其应用于字符数组后,会在字符串两侧添加单引号。例如: ``` a = char('hello'); b = mat2str(a); ``` 执行上述代码后,变量b的值为'hello',这是一个字符串类型。 另一种方法是使用cellstr函数。cellstr函数可以将一个字符数组转换为一个字符串数组,每个元素都是单独的字符串。例如: ``` a = char('hello','world'); b = cellstr(a); ``` 执行上述代码后,变量b的值为一个字符串数组,包含两个元素,分别为'hello''world'。 如果字符数组只有一行,则可以使用string函数将其转换为一个字符串。例如: ``` a = char('hello'); b = string(a); ``` 执行上述代码后,变量b的值为'hello',这是一个字符串类型。 另外还有许多其他的方法可以将字符数组转换为字符串,例如使用sprintf函数,或者手动构造字符串等。在使用时需要根据具体场景选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值