MATLAB 字符串

在MATLAB中創(chuàng)建字符串非常簡單。實(shí)際上,我們已經(jīng)使用了很多次。例如,您在命令提示符下鍵入以下內(nèi)容-

my_string = '(cainiaoplus.com)'

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

my_string = (cainiaoplus.com)

MATLAB將所有變量視為數(shù)組,而字符串則視為字符數(shù)組。讓我們使用whos命令來檢查上面創(chuàng)建的變量-

whos

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

有趣的是,您可以使用數(shù)字轉(zhuǎn)換函數(shù),例如uint8uint16以將字符串中的字符轉(zhuǎn)換為其數(shù)字代碼。char函數(shù)將整數(shù)向量轉(zhuǎn)換回字符-

在線示例

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

my_string = 'nhooo''s com';
str_ascii = uint8(my_string)        %8位 ascii 值
str_back_to_char= char(str_ascii)  
str_16bit = uint16(my_string)       %16位ascii值
str_back_to_char = char(str_16bit)

運(yùn)行文件時(shí),它顯示以下結(jié)果-

str_ascii =

  110  104  111  111  111   39  115   32   99  111  109

str_back_to_char = nhooo's com
str_16bit =

  110  104  111  111  111   39  115   32   99  111  109
str_back_to_char = nhooo's com

矩形字符數(shù)組

到目前為止,我們討論的字符串是一維字符數(shù)組。但是,我們需要存儲更多。我們需要在程序中存儲更多維度的文本數(shù)據(jù)。這是通過創(chuàng)建矩形字符數(shù)組來實(shí)現(xiàn)的。

創(chuàng)建矩形字符數(shù)組的最簡單方法是根據(jù)需要垂直或水平連接兩個(gè)或多個(gè)一維字符數(shù)組。

您可以通過以下兩種方式垂直組合字符串-

  • 使用MATLAB連接運(yùn)算符[],并用分號(;)分隔每一行。請注意,在此方法中,每行必須包含相同數(shù)量的字符。對于長度不同的字符串,應(yīng)根據(jù)需要使用空格字符填充。

  • 使用char函數(shù)。如果字符串的長度不同,char會(huì)用尾隨空格填充較短的字符串,以便每行具有相同的字符數(shù)。

實(shí)例

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

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

運(yùn)行文件時(shí),它顯示以下結(jié)果-

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

您可以通過以下兩種方式水平組合字符串-

  • 使用MATLAB串聯(lián)運(yùn)算符[],并用逗號或空格分隔輸入字符串。此方法保留輸入數(shù)組中的所有尾隨空格。

  • 使用字符串串聯(lián)函數(shù) strcat,此方法刪除輸入中的尾隨空格。

實(shí)例

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

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

運(yùn)行文件時(shí),它顯示以下結(jié)果-

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

將字符串合并到單元格數(shù)組中

從前面的討論中可以明顯看出,合并長度不同的字符串可能會(huì)很麻煩,因?yàn)閿?shù)組中的所有字符串都必須具有相同的長度。我們在字符串的末尾使用了空格來使它們的長度相等。

但是,組合字符串的更有效方法是將結(jié)果數(shù)組轉(zhuǎn)換為單元格數(shù)組。

MATLAB單元數(shù)組可以在數(shù)組中保存不同大小和類型的數(shù)據(jù)。單元數(shù)組提供了一種更靈活的方式來存儲長度可變的字符串。

cellstr函數(shù)將字符數(shù)組轉(zhuǎn)換為字符串的單元格數(shù)組。

實(shí)例

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

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

運(yùn)行文件時(shí),它顯示以下結(jié)果-

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

MATLAB中的字符串函數(shù)

MATLAB提供了許多字符串函數(shù),用于創(chuàng)建,組合,解析,比較和操作字符串。

下表簡要介紹了MATLAB中的字符串函數(shù)-

功能作用
用于在字符數(shù)組中存儲文本,組合字符數(shù)組等的函數(shù)
blanks

創(chuàng)建空白字符字符串

cellstr從字符數(shù)組創(chuàng)建字符串的單元格數(shù)組
char

轉(zhuǎn)換為字符數(shù)組(字符串)

iscellstr確定輸入是否為字符串的單元格數(shù)組
ischar確定項(xiàng)目是否為字符數(shù)組
sprintf將數(shù)據(jù)格式化為字符串
strcat水平連接字符串
strjoin將單元格數(shù)組中的字符串連接為單個(gè)字符串
識別字符串部分,查找和替換子字符串的函數(shù)
ischar確定項(xiàng)目是否為字符數(shù)組
isletter字母數(shù)組元素
isspace作為空格字符的數(shù)組元素
isstrprop確定字符串是否屬于指定類別
sscanf從字符串讀取格式化數(shù)據(jù)
strfind在另一個(gè)字符串中查找一個(gè)字符串
strrep查找并替換子字符串
strsplit在指定的分隔符處分割字符串
strtok字符串的選定部分
validatestring檢查文本字符串的有效性
symvar確定表達(dá)式中的符號變量
regexp匹配正則表達(dá)式(區(qū)分大小寫)
regexpi

匹配正則表達(dá)式(不區(qū)分大小寫)

regexprep使用正則表達(dá)式替換字符串
regexptranslate

將字符串轉(zhuǎn)換為正則表達(dá)式

字符串比較功能
strcmp比較字符串(區(qū)分大小寫)
strcmpi

比較字符串(不區(qū)分大小寫)

strncmp比較字符串的前n個(gè)字符(區(qū)分大小寫)
strncmpi

比較字符串的前 n 個(gè)字符(不區(qū)分大小寫)

用于將字符串更改為大寫或小寫,創(chuàng)建或刪除空格的函數(shù)
deblank從字符串末尾去除尾隨空白
strtrim刪除字符串的前導(dǎo)和尾隨空格
lower將字符串轉(zhuǎn)換為小寫
upper將字符串轉(zhuǎn)換為大寫
strjust對齊字符數(shù)組

實(shí)例

以下示例說明了上述一些字符串函數(shù)-

格式化字符串

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

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

運(yùn)行文件時(shí),它顯示以下結(jié)果-

ans =  3141.592654 
   3141.59 
   +3141.59 
      3141.59 
   000003141.59

連接字符串

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

%字符串單元格數(shù)組
str_array = {'red','blue','green', 'yellow', 'orange'};

%將單元格數(shù)組中的字符串合并為單個(gè)字符串
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")

運(yùn)行文件時(shí),它顯示以下結(jié)果-

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

查找和替換字符串

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};
 
%strrep函數(shù)搜索并替換子字符串。
new_student = strrep(students(8), 'Reva', 'Poulomi')
%顯示名字
first_names = strtok(students)

運(yùn)行文件時(shí),它顯示以下結(jié)果-

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
}

比較字符串

創(chuàng)建一個(gè)腳本文件并在其中鍵入以下代碼-

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

運(yùn)行文件時(shí),它顯示以下結(jié)果-

str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清