在MATLAB中創(chuàng)建字符串非常簡(jiǎn)單。實(shí)際上,我們已經(jīng)使用了很多次。例如,您在命令提示符下鍵入以下內(nèi)容-
my_string = '(cainiaoplus.com)'
MATLAB將執(zhí)行上述語(yǔ)句并返回以下結(jié)果-
my_string = (cainiaoplus.com)
MATLAB將所有變量視為數(shù)組,而字符串則視為字符數(shù)組。讓我們使用whos命令來(lái)檢查上面創(chuàng)建的變量-
whos
MATLAB將執(zhí)行上述語(yǔ)句并返回以下結(jié)果-
Name Size Bytes Class Attributes my_string 1x16 32 char
有趣的是,您可以使用數(shù)字轉(zhuǎn)換函數(shù),例如uint8或uint16以將字符串中的字符轉(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ù)組。但是,我們需要存儲(chǔ)更多。我們需要在程序中存儲(chǔ)更多維度的文本數(shù)據(jù)。這是通過(guò)創(chuàng)建矩形字符數(shù)組來(lái)實(shí)現(xiàn)的。
創(chuàng)建矩形字符數(shù)組的最簡(jiǎn)單方法是根據(jù)需要垂直或水平連接兩個(gè)或多個(gè)一維字符數(shù)組。
您可以通過(guò)以下兩種方式垂直組合字符串-
使用MATLAB連接運(yùn)算符[],并用分號(hào)(;)分隔每一行。請(qǐng)注意,在此方法中,每行必須包含相同數(shù)量的字符。對(duì)于長(zhǎng)度不同的字符串,應(yīng)根據(jù)需要使用空格字符填充。
使用char函數(shù)。如果字符串的長(zhǎng)度不同,char會(huì)用尾隨空格填充較短的字符串,以便每行具有相同的字符數(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
您可以通過(guò)以下兩種方式水平組合字符串-
使用MATLAB串聯(lián)運(yùn)算符[],并用逗號(hào)或空格分隔輸入字符串。此方法保留輸入數(shù)組中的所有尾隨空格。
使用字符串串聯(lián)函數(shù) strcat,此方法刪除輸入中的尾隨空格。
創(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
從前面的討論中可以明顯看出,合并長(zhǎng)度不同的字符串可能會(huì)很麻煩,因?yàn)閿?shù)組中的所有字符串都必須具有相同的長(zhǎng)度。我們?cè)谧址哪┪彩褂昧丝崭駚?lái)使它們的長(zhǎng)度相等。
但是,組合字符串的更有效方法是將結(jié)果數(shù)組轉(zhuǎn)換為單元格數(shù)組。
MATLAB單元數(shù)組可以在數(shù)組中保存不同大小和類(lèi)型的數(shù)據(jù)。單元數(shù)組提供了一種更靈活的方式來(lái)存儲(chǔ)長(zhǎng)度可變的字符串。
cellstr函數(shù)將字符數(shù)組轉(zhuǎn)換為字符串的單元格數(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ù),用于創(chuàng)建,組合,解析,比較和操作字符串。
下表簡(jiǎn)要介紹了MATLAB中的字符串函數(shù)-
| 功能 | 作用 |
|---|---|
| 用于在字符數(shù)組中存儲(chǔ)文本,組合字符數(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í)別字符串部分,查找和替換子字符串的函數(shù) | |
| ischar | 確定項(xiàng)目是否為字符數(shù)組 |
| isletter | 字母數(shù)組元素 |
| isspace | 作為空格字符的數(shù)組元素 |
| isstrprop | 確定字符串是否屬于指定類(lèi)別 |
| sscanf | 從字符串讀取格式化數(shù)據(jù) |
| strfind | 在另一個(gè)字符串中查找一個(gè)字符串 |
| strrep | 查找并替換子字符串 |
| strsplit | 在指定的分隔符處分割字符串 |
| strtok | 字符串的選定部分 |
| validatestring | 檢查文本字符串的有效性 |
| symvar | 確定表達(dá)式中的符號(hào)變量 |
| regexp | 匹配正則表達(dá)式(區(qū)分大小寫(xiě)) |
| regexpi | 匹配正則表達(dá)式(不區(qū)分大小寫(xiě)) |
| regexprep | 使用正則表達(dá)式替換字符串 |
| regexptranslate | 將字符串轉(zhuǎn)換為正則表達(dá)式 |
| 字符串比較功能 | |
| strcmp | 比較字符串(區(qū)分大小寫(xiě)) |
| strcmpi | 比較字符串(不區(qū)分大小寫(xiě)) |
| strncmp | 比較字符串的前n個(gè)字符(區(qū)分大小寫(xiě)) |
| strncmpi | 比較字符串的前 n 個(gè)字符(不區(qū)分大小寫(xiě)) |
| 用于將字符串更改為大寫(xiě)或小寫(xiě),創(chuàng)建或刪除空格的函數(shù) | |
| deblank | 從字符串末尾去除尾隨空白 |
| strtrim | 刪除字符串的前導(dǎo)和尾隨空格 |
| lower | 將字符串轉(zhuǎn)換為小寫(xiě) |
| upper | 將字符串轉(zhuǎn)換為大寫(xiě) |
| strjust | 對(duì)齊字符數(shù)組 |
以下示例說(shuō)明了上述一些字符串函數(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