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 函式。如果字串的長度不同,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 中字串函式的簡要說明:

函式 用途
用於將文字儲存在字元陣列中、組合字元陣列等的功能。
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 = {'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
廣告
© . All rights reserved.