MATLAB 字符串

MATLAB创建字符串

在MATLAB中创建字符串非常简单。例如,在命令提示符中输入以下内容:

zifuchuan="我是字符串"

输出结果:

zifuchuan="我是字符串"

MATLAB将所有变量都视为数组(参考MATLAB数组),而字符串则视为字符数组。使用whos命令(参考MATLAB 命令)检查上面创建的变量:


whos
Name           Size            Bytes  Class     Attributes
zifuchuan      1x1               158  string              

可以使用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函数(参考本文后文或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

该列子演示用 []+;方法和char()函数方法实现了同样的效果:将字符串数组垂向链接。

水平组合字符串数组同样有两种方法:

  • 使用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

该列子演示用 “[]+,“方法和stract()函数方法实现了同样的效果:将字符串数组水平链接。注意结果中空格是否被保留。

将字符串组合成单元格数组

从前面的讨论中可以看出,组合不同长度的字符串可能很麻烦:因为数组中的所有字符串必须具有相同的长度。而前面的方法是在字符串的末尾使用空格来平衡它们的长度。

但是,组合字符串更有效的方法是将结果数组转换为单元格数组。

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具有大量创建、组合、解析、比较和操作字符串的字符串函数。以下是一些常用的函数:

函数作用
用于在字符数组中存储文本,组合字符数组等的函数
blanks创建空白字符的字符串
cellstr从字符数组中创建字符串的单元格数组
char转换为字符数组(字符串)
iscellstr确定输入是否为字符串的单元格数组
ischar确定是否为字符数组
sprintf将数据格式化为字符串
strcat横向连接字符串
strjoin将单元格数组中的字符串连接为单个字符串
用于标识字符串的各个部分、查找和替换子字符串的函数
ischar确定是否为字符数组
isletter确定是否为字母数组元素
isspace确定数组元素是否为空格字符
isstrprop确定字符串是否属于指定类别
sscanf从字符串中读取格式化数据
strfind在一个字符串中找到另一个字符串
strrep查找和替换子字符串
strsplit在指定的分隔符处分隔字符串
strtok字符串的选定部分
validatestring检查文本字符串的有效性
symvar确定表达式中的符号变量
regexp匹配正则表达式(区分大小写);参考:MATLAB正则表达式
regexpi匹配正则表达式(大小写不敏感)
regexprep使用正则表达式替换字符串
regexptranslate将字符串转换为正则表达式
用于字符串比较的函数
strcmp比较字符串(区分大小写)
strcmpi比较字符串(不区分大小写)
strncmp比较字符串的前n个字符(区分大小写)
strncmpi比较字符串的前n个字符(大小写不敏感)
用于将字符串更改为大写或小写,创建或删除空白的函数
deblank从字符串末尾去掉尾随空格
strtrim从字符串中删除开头和结尾的空白
lower转换字符串为小写
upper将字符串转换为大写
strjust证明字符数组

举例

下面的例子说明了上面提到的一些字符串函数

  • 格式化字符串

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 
  • 连接字符串

%c字符串的单元格数组
str_array = {'red','blue','green', 'yellow', 'orange'};

% 将单元格数组拼接为单个数组
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'};
 
% strrep()函数查找并替换子字符串
new_student = strrep(students(8), 'Reva', 'Poulomi')
% 显示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





公众号

关注公众号,获取一手资讯

“ MATLAB 字符串 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注