官术网_书友最值得收藏!

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
主站蜘蛛池模板: 澎湖县| 通化县| 鄂尔多斯市| 武宁县| 甘孜县| 临高县| 冕宁县| 攀枝花市| 江陵县| 黄骅市| 阿坝县| 浦北县| 连城县| 武川县| 古丈县| 神池县| 襄樊市| 内丘县| 潮州市| 平乡县| 铁岭市| 德昌县| 湾仔区| 太和县| 汝阳县| 德钦县| 长汀县| 原阳县| 沅江市| 什邡市| 新津县| 紫金县| 陆丰市| 南川市| 四子王旗| 衢州市| 庐江县| 聊城市| 三门县| 二连浩特市| 新竹县|