- MATLAB從基礎到精通
- 王薇編著
- 2639字
- 2019-01-01 12:47:28
2.4 字符串
MATLAB中提供了字符串類型用于處理文本等字符型數據。字符串可以理解為字符的數組,而字符在MATLAB存儲空間中又與相應的ASCII碼對應。
2.4.1 字符串的生成
字符串的生成主要是通過直接賦值法、已有字符串的連接和其他數據類型的轉換三種形式。其中其他數據類型的轉換將在本章2.7節中詳細敘述。
1.一維字符串
在一對單引號的中間放置字符數據,即構成字符串類型的數據。字符串類型的數據每個字符占2字節的存儲空間。
【例2.6】一維字符串的生成。
(1)直接賦值法。
>>str1='ABCDEF'; %定義字符串str1,其中的字符數據為ABCDEF >> class(str1) % str1的數據類型為字符串 ans = char >> whos str1 %每個字符占2字節的存儲空間 Name Size Bytes Class str1 1x6 12 char array Grand total is 6 elements using 12 bytes
(2)連接法,可以通過連接函數strcat()或者連接符“[ ]”。
>> str2=strcat(str1,'STR') %strcat()函數用于水平連接字符串變量str1和字符串“STR” str2 = ABCDEFSTR >> str2=strcat('STR ',str1) %注意使用strcat()函數連接時,字符串末尾的空格會自動去除 str2 = STRABCDEF >> str3=[str1,str2] %使用連接符“[ ]”連接字符串 str3 = ABCDEFABCDEFSTR >> str2=['STR ',str1] %注意使用連接符“[ ]”連接時,字符串末尾的空格不去除 str2 = STR ABCDEF
2.二維字符串
二維字符串的生成方法與一維類似,不過使用連接符“[ ]”連接時,二維字符串要求每行的字符有相同的列數,如果每行列數不同會報錯,此時可以通過填空補足。
【例2.7】二維字符串的生成。
>> str1=['ABC';'ab'] %連接的字符串列數不同,程序報錯 ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. >> str1=['ABC';'ab '] %通過字符串末尾填空,保持字符串每行列數相同 str1 = ABC ab >> str2=char('ABC','ab') % char()創建二維字符串,列數不同的字符行,末尾自動留空 str2 = ABC ab >> whos str1 str2 %字符串str1和str2在內存中占相同的存儲空間 Name Size Bytes Class str1 2x3 12 char array str2 2x3 12 char array Grand total is 12 elements using 24 bytes >> str3=strvcat(str1,str2) %垂直連接字符串str1和str2 str3 = ABC ab ABC ab
2.4.2 字符串操作函數
字符串類型變量無論在任何編程環境中都是經常使用的,而MATLAB已為用戶提供了豐富的函數直接處理字符串,包括字符串的判斷、訪問、查找、替換、比較、大小寫轉換、執行。下面詳細介紹這些操作的實現。
1.字符串的判斷
● ischar(s):判斷變量s的數據類型是否為字符串,返回結果為邏輯變量,如果是則為“1”,否則為“0”。
● isletter(s):判斷字符串s中每個字符元素是否為字母,返回結果為邏輯型的向量,“1”代表字符串相應位置的元素為字母,“0”代表字符串相應位置的元素不為字母。
● isspce(s):判斷字符串s中每個字符元素是否為空格,返回結果為邏輯型的向量,“1”代表字符串相應位置的元素為空格,“0”代表字符串相應位置的元素不為空格。
【例2.8】字符串的判斷。
>> str1=['A B123','CD 5 '] %字符串生成 str1 = A B123CD 5 >> ischar(str1) %判斷數據的數據類型是否為字符串 ans = 1 >> isletter(str1) %判斷字符串中每個字符元素是否為字母 ans = 1 0 1 0 0 0 1 1 0 0 0 0 >> isspace(str1) %判斷字符串中每個字符元素是否為空格 ans = 0 1 0 0 0 0 0 0 1 1 0 1
2.字符串的訪問
字符串中相應字符的訪問是通過下標法來實現的,即根據字符元素在字符串中的位置來訪問,其中位置的確定包括行列坐標和線性索引坐標兩種方式。在MTALAB中字符數組是按列存儲的。
【例2.9】字符串的訪問。
>> str1=char('abc','d f',' 1ee3 '); %生成字符串 >> str1 str1 = abc d f 1ee3 >> str1(1,:) %訪問字符串中的第1行元素 ans = abc >> str1(1,2) %訪問字符串中的第1行第2列元素 ans = b >> str1([1,2]) %按線性索引訪問 ans = ad >> str1([1,2],[2,3]) %按行列坐標索引訪問 ans = bc f
3.字符串的查找和替換
● k = strfind(str, s):在字符串str中查找字符s,如存在則返回字符在字符串str中出現的下標,沒有返回的k為空矩陣。
● k = findstr(s1, s2):函數查找與被查找元素與其在函數中的順序無關,即函數findstr(s1, s2)與findstr(s2, s1)結果是一樣的,在長字符串中查找短字符串,存在則返回字符在字符串中出現的下標,沒有返回的k為空矩陣。
● str=strrep(s1,s2,s3):在字符串s1中查找字符串s2并將其替換為字符串s3。
● i = strmatch(s1,s2):在字符串s1中匹配查找與字符串s2起始一致的字符行,返回行號。
● i = strmatch(s1,s2,’exact’):在字符串s1中匹配查找與字符串s2完全一致的字符行,返回行號。
【例2.10】字符串的查找和替換。
>> str1='Specify character data by placing characters inside a pair of single quotes'; >> k = strfind(str1, 'ar') %在字符串str1中查找字符串“ar”,返回其在字符串中出現的位置 k = 11 37 >> k = strfind(str1, 'are') %在字符串str1中查找字符串“are”,如果不存在,則返回空矩陣 k = [] >> k = findstr(str1, 'ar') %在字符串str1中查找字符串“ar”,返回其在字符串中出現的位置 k = 11 37 >> k = findstr('ar',str1 ) %顛倒查找函數中的字符串順序后,結果是一樣的 k = 11 37 >> str=strrep(str1,'ar','are') str = Specify chareacter data by placing chareacters inside a pair of single quotes >> i = strmatch('min', strvcat('min', 'minimax', 'maximum')) %字符串中匹配查找 i = 1 2 >> i = strmatch('min',strvcat('min','minimax','maximum'),'exact')%字符串中精確的匹配查找 i = 1
4.字符串的比較
● k=strcmp(s1,s2):比較字符串s1和s2是否相同,如果相同則返回邏輯變量“1”,如果不相同則返回“0”。
● k=strncmp(s1,s2,n):比較字符串s1和s2前n個字符是否相同,如果相同則返回邏輯變量“1”,如果不相同則返回“0”。
● k=strcmpi(s1,s2):比較字符串s1和s2是否相同,不區分字符串字母的大小寫,相同則返回邏輯變量“1”,不相同則返回“0”。
【例2.11】字符串的比較。
>> str1='ABC'; >> str2='ABC'; >> str3='abc'; >> str4='ABCD'; >> k1=strcmp(str1,str2) %比較字符串st1和str2是否相同,如果相同,則返回“1” k1 = 1 >> k2=strcmp(str1,str3) %比較字符串st1和str3是否相同,如果不相同,則返回“0” k2 = 0 >> k3=strcmpi(str1,str3) %不區分大小寫,比較字符串st1和str3是否相同,如果相同則返回“1” k3 = 1 >> k4=strncmp(str1,str4,3) %比較字符串st1和str2前3個字符是否相同,如果相同,則返回“1” k4 = 1
5.字符串的大小寫轉換
● str=lower(s):將字符串s中的大寫英文字母全部轉換為小寫。
● str=upper(s):將字符串s中的小寫英文字母全部轉換為小寫。
【例2.12】字符串的大小寫轉換。
>> str1='asDD ssDD , kDEF'; >> str=lower(str1) %將字符串str1中的大寫英文字母全部轉換為小寫 str = asdd ssdd , kdef >> str=upper(str1) %將字符串str1中的小寫英文字母全部轉換為大寫 str = ASDD SSDD , KDEF
6.字符串的執行
eval()函數可用于字符串表達式的執行,函數的具體用法如下。
● eval(expression):用于在命令行執行expression中的字符串表達式。
● [a1,a2,a3,...] = eval(‘function(b1,b2,b3,...)’):其中“function(b1,b2,b3,...)”為待執行的字符串表達式,“a1,a2,a3,...”為字符串表達式的輸出結果。
【例2.13】字符串的執行。
>> A=rand(3); >> eval('length(A)') %執行求取矩陣A長度的字符串表達式 ans = 3 >> [I,J]=eval('size(A)') %執行求取矩陣A大小的字符串表達式,返回結果為矩陣A的行、列數 I = 3 J = 3 >> for i=1:3 %代碼實現分別給變量a1、a2、a3賦值 eval(['a',num2str(i),'=2*i']) end a1 = 2 a2 = 4 a3 = 6
7.字符串的空格操作相關函數
● str=strtok(s):查找字符串第一個空格前的字符,返回到字符串str中。
● str=deblank(s):去除字符串s末尾的空格,返回去除空格的字符串str。
● str = strtrim(s):刪除字符串s頭尾的空格,返回去除空格的字符串str。
● blanks(n):生成含n個空格的字符串。
【例2.14】字符串的空格操作。
>> str1='AABB CCDD EEFF '; >> str2=strtok(str1) %返回字符串str1第一個空格前的字符 str2 = AABB >> str3=deblank(str1) %去除字符串末尾的空格,原字符串長度為16,去除空格后為14 str3 = AABB CCDD EEFF >> length(str1) ans = 16 >> length(str3) ans = 14 >> str4=' AABB CCDD EEFF '; >> str5=strtrim(str4) %去除字符串頭、尾的空格,原字符串長度為18,去除空格后為14 >> str5 str5 = AABB CCDD EEFF >> length(str4) ans = 18 >> length(str5) ans = 14 >> str6=[str5,blanks(3),str5] %字符串中添加3個空格 str6 = AABB CCDD EEFF AABB CCDD EEFF
- Bootstrap Site Blueprints Volume II
- What's New in TensorFlow 2.0
- 程序員面試筆試寶典
- Python語言程序設計
- Mastering macOS Programming
- 快速念咒:MySQL入門指南與進階實戰
- C++新經典
- Kubernetes進階實戰
- Mastering Adobe Captivate 7
- Akka入門與實踐
- Go Systems Programming
- HTML5 Canvas核心技術:圖形、動畫與游戲開發
- 軟件再工程:優化現有軟件系統的方法與最佳實踐
- Roslyn Cookbook
- 深度學習:基于Python語言和TensorFlow平臺(視頻講解版)