MATLAB 字符串

  • 字符串

    在MATLAB中创建字符串非常简单。实际上,我们已经使用了很多次。例如,您在命令提示符下键入以下内容-
    
    my_string = 'Jc2182'
    
    尝试一下
    MATLAB将执行上述语句并返回以下结果-
    
    my_string = Jc2182
    
    MATLAB将所有变量视为数组,而字符串则视为字符数组。让我们使用whos命令检查上面创建的变量-
    
    whos
    
    MATLAB将执行上述语句并返回以下结果-
    
    Name           Size            Bytes  Class    Attributes
    my_string      1x16               32  char
    
    有趣的是,您可以使用uint8或uint16之类的数字转换函数将字符串中的字符转换为其数字代码。所述炭函数转换整数向量回到字符-
    创建一个脚本文件并在其中键入以下代码-
    
    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 =Jc2182
    str_16bit =
    
       84  117  116  111  114  105   97  108   39  115   32   80  111  105  110  116
    
    str_back_to_char =Jc2182
    
  • 矩形字符数组

    到目前为止,我们讨论的字符串是一维字符数组。但是,我们需要存储更多。我们需要在程序中存储更多维度的文本数据。这是通过创建矩形字符数组来实现的。
    创建矩形字符数组的最简单方法是根据需要连接两个或多个垂直或水平的一维字符数组。
    您可以通过以下两种方式垂直组合字符串-
    • 使用MATLAB串联运算符[],并用分号(;)分隔每一行。请注意,在此方法中,每一行必须包含相同数量的字符。对于不同长度的字符串,应根据需要使用空格字符填充。
    • 使用char函数。如果字符串的长度不同,则用较短的字符串末尾用空格填充字符,以使每行具有相同数量的字符。
    创建一个脚本文件并在其中键入以下代码-
    
    doc_profile = ['Alex Moo                             '; ...
                   'Sr. Surgeon                          '; ...
                   'R N Tagore Cardiology Research Center']
    doc_profile = char('Alex Moo', 'Sr. Surgeon', ...
                      'RN Tagore Cardiology Research Center')
    
    尝试一下
    运行文件时,它显示以下结果-
    
    doc_profile =
    Alex Moo                             
    Sr. Surgeon                          
    R N Tagore Cardiology Research Center
    doc_profile =
    Alex Moo                            
    Sr. Surgeon                         
    RN Tagore Cardiology Research Center
    
    您可以通过以下两种方式水平组合字符串-
    • 使用MATLAB串联运算符[],并用逗号或空格分隔输入字符串。此方法保留输入数组中的所有尾随空格。
    • 使用字符串连接功能strcat。此方法删除输入中的尾随空格。
    创建一个脚本文件并在其中键入以下代码-
    
    name =     'Alex Moo                             ';
    position = 'Sr. Surgeon                          '; 
    worksAt =  'R N Tagore Cardiology Research Center';
    profile = [name ', ' position ', ' worksAt]
    profile = strcat(name, ', ', position, ', ', worksAt)
    
    尝试一下
    运行文件时,它显示以下结果-
    
    profile = Alex Moo      , Sr. Surgeon      , R N Tagore Cardiology Research Center
    profile = Alex Moo,Sr. Surgeon,R N Tagore Cardiology Research Center
    
  • 字符串合并到单元格数组中

    从我们之前的讨论中可以明显看出,合并长度不同的字符串可能会很麻烦,因为数组中的所有字符串都必须具有相同的长度。我们在字符串的末尾使用了空格来使它们的长度相等。
    但是,组合字符串的更有效方法是将结果数组转换为单元格数组。
    MATLAB单元数组可以在数组中保存不同大小和类型的数据。单元数组提供了一种更灵活的方式来存储长度可变的字符串。
    所述cellstr的函数转换字符数组成字符串的单元数组。
    - 创建一个脚本文件并在其中键入以下代码-
    
    name =     'Alex Moo                             ';
    position = 'Sr. Surgeon                          '; 
    worksAt =  'R N Tagore Cardiology Research Center';
    profile = char(name, position, worksAt);
    profile = cellstr(profile);
    disp(profile)
    
    尝试一下
    运行文件时,它显示以下结果-
    
    {                                                                               
       [1,1] = Alex Moo                                                              
       [2,1] = Sr. Surgeon                                                           
       [3,1] = R N Tagore Cardiology Research Center                                 
    }   
    
  • MATLAB中的字符串函数

    MATLAB提供了许多字符串函数,可以创建,组合,解析,比较和操作字符串。
    下表简要介绍了MATLAB中的字符串函数-
    函数 功能
    用于在字符数组中存储文本,组合字符数组等的函数
    blanks 创建一串空白字符
    cellstr 从字符数组创建字符串的单元格数组
    char 转换为字符数组(字符串)
    iscellstr 确定输入是否为字符串的单元格数组
    ischar 确定项目是否为字符数组
    sprintf 将数据格式化为字符串
    strcat 水平连接字符串
    strjoin 将单元格数组中的字符串连接为单个字符串
    识别字符串部分,查找和替换子字符串的函数
    ischar 确定项目是否为字符数组
    isletter 字母数组元素
    isspace 空格字符数组元素
    isstrprop 确定字符串是否属于指定类别
    sscanf 从字符串读取格式化的数据
    strfind 在另一个字符串中查找一个字符串
    strrep 查找并替换子字符串
    strsplit 在指定的分隔符处分割字符串
    strtok 字符串的选定部分
    validatestring 检查文本字符串的有效性
    symvar 确定表达式中的符号变量
    regexp 匹配正则表达式(区分大小写)
    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 
    
    连接字符串
    创建一个脚本文件并在其中键入以下代码-
    
    %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 = {'Alex Moo', '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