MATLAB字符串

在MATLAB中,创建一个字符串是相当简单。事实上,我们已经用了很多次。例如,在命令提示符处输入以下:

my_string = 'Tutorial''s Yiibai'
MATLAB 将执行上面的语句,并返回以下结果:

my_string =
Tutorial's Yiibai
MATLAB 认为所有变量,数组和字符串被视为字符数组。让我们使用的命令检查上面创建的变量:

whos

MATLAB将执行上面的语句,并返回以下结果:

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

有趣的是,你可以使用数字转换函数,如uint8 或 uint16 字符串中的字符转换成数字代码。 char 函数整数向量转换回字符: 

例子

创建一个脚本文件,并键入下面的代码:

my_string = 'Tutorial''s Yiibai';
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 =
  Columns 1 through 14
   84  117  116  111  114  105   97  108   39  115   32   80  111  105
  Columns 15 through 16
  110  116
str_back_to_char =
Tutorial's Yiibai
str_16bit =
  Columns 1 through 10
     84    117    116    111    114    105     97    108     39    115
  Columns 11 through 16
     32     80    111    105    110    116
str_back_to_char =
Tutorial's Yiibai

矩形字符数组

到目前为止我们已经讨论过的字符串的字符数组是一维,但是,我们需要存储超过。我们需要更立体的文本数据存储在我们的程序中。这是通过创建的矩形的字符数组。

创建一个矩形字符数组的最简单的方法是通过连接两个或两个以上的一维字符数组,无论是垂直或水平的要求。

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

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

  • 使用char函数。如果字符串长度不同和 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)

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

'Zara Ali'
'Sr. Surgeon'
'R N Tagore Cardiology Research Center'

MATLAB中的字符串函数

MATLAB 提供了许多创建,组合,分析,比较和处理字符串的字符串函数。

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

函数 目的/作用
用于存储文本字符数组的函数,结合字符数组,等等
blanks Create string of blank characters
cellstr Create cell array of strings from character array
char Convert to character array (string)
iscellstr Determine whether input is cell array of strings
ischar Determine whether item is character array
sprintf Format data into string
strcat Concatenate strings horizontally
strjoin Join strings in cell array into single string
识别字符串部分的函数,查找和替换子串
ischar Determine whether item is character array
isletter Array elements that are alphabetic letters
isspace Array elements that are space characters
isstrprop Determine whether string is of specified category
sscanf Read formatted data from string
strfind Find one string within another
strrep Find and replace substring
strsplit Split string at specified delimiter
strtok Selected parts of string
validatestring Check validity of text string
symvar Determine symbolic variables in expression
regexp Match regular expression (case sensitive)
regexpi Match regular expression (case insensitive)
regexprep Replace string using regular expression
regexptranslate Translate string into regular expression
字符串比较函数
strcmp Compare strings (case sensitive)
strcmpi Compare strings (case insensitive)
strncmp Compare first n characters of strings (case sensitive)
strncmpi Compare first n characters of strings (case insensitive)
改变字符串大写或小写,创建或删除空格的函数
deblank Strip trailing blanks from end of string
strtrim Remove leading and trailing white space from string
lower Convert string to lowercase
upper Convert string to uppercase
strjust Justify character array

例子

下面的示例说明了上述的一些字符串的函数:

格式化字符串

创建一个脚本文件,并键入下面的代码:

A = pi*1000*ones(1,5);
sprintf(' %f 
 %.2f 
 %+.2f 
 %12.2f 
 %012.2f 
', 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 = 
    'Poulomi Dutta'
first_names = 
  Columns 1 through 6
    'Zara'    'Neha'    'Monica'    'Madhu'    'Madhu'    'Bhawna'
  Columns 7 through 10
    'Nuha'    'Reva'    'Sunaina'    'Sofia'

比较字符串

创建一个脚本文件,并键入下面的代码:

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
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3