# Matlab字串

``````my_string = 'Yiibai Yiibai'
``````

MATLAB執行上述語句並返回以下結果 -

``````Trial>> my_string = 'Yiibai Yiibai'

my_string =

'Yiibai Yiibai'
``````

MATLAB將所有變數視為陣列，並將字串視為字元陣列。使用`whos`命令來檢查上面建立的變數 -

``````
Trial>> whos
Name           Size            Bytes  Class    Attributes

ans            1x92              184  char
my_string      1x16               32  char
x              1x3               360  cell
``````

``````my_string = 'Yiibai''s Tutorial';
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 =

1×17 uint8 行向量

1 至 15 列

89   105   105    98    97   105    39   115    32    84   117   116   111   114   105

16 至 17 列

97   108

str_back_to_char =

'Yiibai's Tutorial'

str_16bit =

1×17 uint16 行向量

1 至 15 列

89   105   105    98    97   105    39   115    32    84   117   116   111   114   105

16 至 17 列

97   108

str_back_to_char =

'Yiibai's Tutorial'
``````

## 矩形字元陣列

• 使用MATLAB連線運算子`[]`並用分號(`;`)分隔每一行。 請注意，在這種方法中，每行必須包含相同數量的字元。對於不同長度的字串，應該根據需要填充空格字元。

• 使用`char`函式。如果字串的長度不同，則`char`將較短的字串填充到尾部空白處，以使每行具有相同的字元數。

## 範例

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

``````Trial>> doc_profile = ['Bara Tli                             '; ...
'Sr. Surgeon                          '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Bara Tli', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')

doc_profile =

3×37 char 陣列

'Bara Tli                             '
'Sr. Surgeon                          '
'R N Tagore Cardiology Research Center'

doc_profile =

3×36 char 陣列

'Bara Tli                            '
'Sr. Surgeon                         '
'RN Tagore Cardiology Research Center'
``````

• 使用MATLAB連線運算子 - `[]`並用逗號(`;`)或空格分隔輸入字串。該方法保留輸入陣列中的任何尾隨空格。
• 使用字串連線函式 - `strcat`。 此方法會刪除輸入中的尾隨空格。

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

``````Trial>> name =     'Myra Yli                             ';
position = 'Sr. Surgeon                          ';
worksAt =  'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)

profile =

'Myra Yli                             , Sr. Surgeon                          , R N Tagore Cardiology Research Center'

profile =

'Myra Yli,Sr. Surgeon,R N Tagore Cardiology Research Center'
``````

## 將字串組合成單元格陣列

MATLAB單元格陣列可以在陣列中儲存不同大小和型別的資料。單元格陣列提供了一種更靈活的方法來儲存不同長度的字串。

`cellstr`函式將字元陣列轉換為字串的單元格陣列。

## 範例

``````name =     'Myra Tli                             ';
position = 'St. Sargeon                          ';
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
``````

``````Trial>> name =     'Myra Tli                             ';
position = 'St. Sargeon                          ';
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
'Myra Tli'
'St. Sargeon'
'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` 匹配正規表示式(區分大小寫)
`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 = {'Bara Ali', 'Neha Bhatnagar', ...
'Muha Ali', 'Reva Dutta', ...
'Tunaina 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)
``````

``````Trial>> students = {'Bara Ali', 'Neha Bhatnagar', ...
'Muha Ali', 'Reva Dutta', ...
'Tunaina 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 cell 陣列

{'Poulomi Dutta'}

first_names =

1×10 cell 陣列

1 至 7 列

8 至 10 列

{'Reva'}    {'Tunaina'}    {'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
``````