MATLAB - 字符串


在 MATLAB 中创建字符串非常简单。事实上,我们已经使用过很多次了。例如,您在命令提示符中键入以下内容 -

my_string = 'Tutorials Point'

MATLAB 将执行上述语句并返回以下结果 -

my_string = Tutorials Point

MATLAB 将所有变量视为数组,而字符串则视为字符数组。让我们使用whos命令来检查上面创建的变量 -

whos

MATLAB 将执行上述语句并返回以下结果 -

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

有趣的是,您可以使用uint8uint16等数字转换函数将字符串中的字符转换为其数字代码。char函数整数向量转换回字符 -

例子

创建一个脚本文件并在其中输入以下代码 -

my_string = 'Tutorial''s Point';
str_ascii = uint8(my_string)        % 8-bit ascii values
str_back_to_char= char(str_ascii)  
str_16bit = uint16(my_string)       % 16-bit ascii values
str_back_to_char = char(str_16bit)  

当您运行该文件时,它会显示以下结果 -

str_ascii =

   84  117  116  111  114  105   97  108   39  115   32   80  111  105  110  116

str_back_to_char = Tutorial's Point
str_16bit =

   84  117  116  111  114  105   97  108   39  115   32   80  111  105  110  116

str_back_to_char = Tutorial's Point

矩形字符数组

到目前为止我们讨论的字符串都是一维字符数组;然而,我们需要存储的还不止这些。我们需要在程序中存储更多维度的文本数据。这是通过创建矩形字符数组来实现的。

创建矩形字符数组的最简单方法是根据需要垂直或水平连接两个或多个一维字符数组。

您可以通过以下方式之一垂直组合字符串 -

  • 使用 MATLAB 连接运算符[]并用分号 (;) 分隔每一行。请注意,在此方法中,每行必须包含相同数量的字符。对于不同长度的字符串,应根据需要用空格字符填充。

  • 使用字符函数。如果字符串的长度不同,则 char 会用尾随空格填充较短的字符串,以便每行具有相同数量的字符。

例子

创建一个脚本文件并在其中输入以下代码 -

doc_profile = ['Zara Ali                             '; ...
               'Sr. Surgeon                          '; ...
               'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
                  'RN Tagore Cardiology Research Center')

当您运行该文件时,它会显示以下结果 -

doc_profile =
Zara Ali                             
Sr. Surgeon                          
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali                            
Sr. Surgeon                         
RN Tagore Cardiology Research Center

您可以通过以下任一方式水平组合字符串 -

  • 使用 MATLAB 连接运算符[]并用逗号或空格分隔输入字符串。此方法保留输入数组中的所有尾随空格。

  • 使用字符串连接函数strcat。此方法删除输入中的尾随空格。

例子

创建一个脚本文件并在其中输入以下代码 -

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)

当您运行该文件时,它会显示以下结果 -

profile = Zara Ali      , Sr. Surgeon      , R N Tagore Cardiology Research Center
profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center

将字符串组合成元胞数组

从我们之前的讨论中可以清楚地看出,组合不同长度的字符串可能会很痛苦,因为数组中的所有字符串都必须具有相同的长度。我们在字符串末尾使用空格来均衡它们的长度。

然而,组合字符串的更有效方法是将结果数组转换为元胞数组。

MATLAB 元胞数组可以在数组中保存不同大小和类型的数据。元胞数组提供了一种更灵活的方式来存储不同长度的字符串。

cellstr函数将字符数组转换为字符串元胞数组。

例子

创建一个脚本文件并在其中输入以下代码 -

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)

当您运行该文件时,它会显示以下结果 -

{                                                                               
   [1,1] = Zara Ali                                                              
   [2,1] = Sr. Surgeon                                                           
   [3,1] = R N Tagore Cardiology Research Center                                 
}   

MATLAB 中的字符串函数

MATLAB 提供了大量的字符串函数来创建、组合、解析、比较和操作字符串。

下表提供了 MATLAB 中字符串函数的简要说明 -

功能 目的
用于在字符数组中存储文本、组合字符数组等的函数。
空白 创建空白字符的字符串
细胞因子 从字符数组创建字符串元胞数组
字符 转换为字符数组(字符串)
iscellstr 确定输入是否为字符串元胞数组
伊斯查尔 判断item是否为字符数组
冲刺函数 将数据格式化为字符串
字符串猫 水平连接字符串
斯特联 将元胞数组中的字符串连接成单个字符串
用于识别字符串部分、查找和替换子字符串的函数
伊斯查尔 判断item是否为字符数组
岛信 数组元素为字母
空间 数组元素为空格字符
isstrprop 判断字符串是否属于指定类别
扫描仪 从字符串中读取格式化数据
搜索结果 在另一个字符串中查找一个字符串
斯特雷普 查找并替换子字符串
分割线 在指定分隔符处分割字符串
斯特托克 字符串的选定部分
验证字符串 检查文本字符串的有效性
符号变量 确定表达式中的符号变量
正则表达式 匹配正则表达式(区分大小写)
正则表达式 匹配正则表达式(不区分大小写)
正则表达式 使用正则表达式替换字符串
正则表达式翻译 将字符串转换为正则表达式
字符串比较函数
STRCMP 比较字符串(区分大小写)
STRCMPI 比较字符串(不区分大小写)
STRNCMP 比较字符串的前 n 个字符(区分大小写)
结构体 比较字符串的前 n 个字符(不区分大小写)
用于将字符串更改为大写或小写、创建或删除空格的函数
去空白 从字符串末尾去除尾随空格
字符串修剪 删除字符串中的前导和尾随空格
降低 将字符串转换为小写
将字符串转换为大写
调整 对齐字符数组

例子

以下示例说明了一些上述字符串函数 -

格式化字符串

创建一个脚本文件并在其中输入以下代码 -

A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

当您运行该文件时,它会显示以下结果 -

ans =  3141.592654 
   3141.59 
   +3141.59 
      3141.59 
   000003141.59 

连接字符串

创建一个脚本文件并在其中输入以下代码 -

%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};

% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")

当您运行该文件时,它会显示以下结果 -

str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange

查找和替换字符串

创建一个脚本文件并在其中输入以下代码 -

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};
 
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)

当您运行该文件时,它会显示以下结果 -

new_student = 
{
   [1,1] = Poulomi Dutta
}
first_names = 
{
   [1,1] = Zara
   [1,2] = Neha
   [1,3] = Monica
   [1,4] = Madhu
   [1,5] = Madhu
   [1,6] = Bhawna
   [1,7] = Nuha
   [1,8] = Reva
   [1,9] = Sunaina
   [1,10] = Sofia
}

比较字符串

创建一个脚本文件并在其中输入以下代码 -

str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
   sprintf('%s and %s are equal', str1, str2)
else
   sprintf('%s and %s are not equal', str1, str2)
end

当您运行该文件时,它会显示以下结果 -

str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal