午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

MATLAB字符和字符串

 goandlove 2019-01-22

3.字符和字符串

MATLAB中,幾個(gè)字符(Character)可以構(gòu)一個(gè)字符串(String)。一個(gè)字符串被視為一個(gè)行向量,而字符串中的每一個(gè)字符(含空格符),則是以其ASCII的形式存放于此向量的每一個(gè)元素中,只是它的外顯形式仍然是可讀的字符。字符串類型在數(shù)據(jù)的可視化、應(yīng)用程序的交互方面有著非常重要的作用。

3.1 創(chuàng)建字符串

1.一般字符串的創(chuàng)建

MATLAB中,所有的字符串都用兩個(gè)單引號(hào)括起來(lái),進(jìn)行輸入賦值。如在MATLAB命令窗口中輸入:

>> a='matlab'

a =

matlab

字符串的每個(gè)字符(空格也是字符)都是相應(yīng)矩陣的一個(gè)元素,上述變量a1×6階的矩陣,可以用size(a)命令查得:

>> size(a)

ans =

     1     6       %  16

2.中文字符串的創(chuàng)建

中文也可以作為字符串的內(nèi)容。但需要注意的是:在中文字符串的輸入過(guò)程中,兩邊的單引號(hào)必須是英文狀態(tài)的單引號(hào)。例如:

>> A='中文字符串輸入演示'

A =

中文字符串輸入演示

3.字符串的尋訪

MATLAB中,字符串的尋訪可以通過(guò)其坐標(biāo)來(lái)實(shí)現(xiàn)。在一個(gè)字符串中,MATLAB按照從左至右的順序?qū)ψ址械淖址来尉幪?hào)(1,23,…)。進(jìn)行字符串的尋訪,只需要像尋訪一般矩陣那樣即可。例如在前面創(chuàng)建了中文字符串A之后可以得到:

>> A(3:5)

ans =

字符串

4.字符串?dāng)?shù)組的創(chuàng)建

二維字符串(數(shù)組)的建立也非常簡(jiǎn)單。可以像數(shù)值數(shù)組的建立那樣直接輸入,也可以使用str2mat等函數(shù)建立。

【例3-6】  多行串?dāng)?shù)組的直接輸入示例。

>> clear

>> S=['This string array '

'has multiple rows.']

S =

This string array

has multiple rows.

>> size(S)

ans =

     2    18

需要注意的是:在直接輸入多行字符串?dāng)?shù)組的時(shí)候,每一行的字符個(gè)數(shù)必須相同。

【例3-7】  使用函數(shù)str2mat創(chuàng)建多行串?dāng)?shù)組示例。

>> a=str2mat('','字符','串?dāng)?shù)組','','5 行組成')

a =

    

字符   

串?dāng)?shù)組  

     

5 行組成

>> size(a)

ans =

     5    6

在使用函數(shù)str2mat創(chuàng)建字符串?dāng)?shù)組的時(shí)候,不用擔(dān)心每一行的字符個(gè)數(shù)是否相等,函數(shù)在運(yùn)行中會(huì)以字符最多的一行為準(zhǔn),而將其他行中的字符以空格補(bǔ)齊。

3.2  字符串比較

MATLAB中,有多種對(duì)字符串進(jìn)行比較的功能:

(1)比較兩個(gè)字符串或者子串是否相等;

(2)比較字符串中的單個(gè)字符是否相等;

(3)對(duì)字符串內(nèi)的元素分類,判斷每個(gè)元素是否是字符或者空格。

用戶可以使用下面4個(gè)函數(shù)中的任意一個(gè),來(lái)判斷兩個(gè)輸入字符串是否相等。

(1)strcmp:判斷兩個(gè)字符串是否相等。

(2)strncmp:判斷兩個(gè)字符串的前n個(gè)字符是否相等。

(3)strcmpi和strncmpi:這兩個(gè)函數(shù)的作用分別與strcmp和strncmp相同,只是在比較的過(guò)程中忽略了字母大小寫。

考慮有這兩個(gè)字符串:

>>str1 = 'hello';

>>str2 = 'help';

字符串str1str2并不相等,所以使用strcmp函數(shù)來(lái)判斷的話,將會(huì)返回邏輯0false)。例如:

>>C = strcmp(str1,str2) 

C =

    0

由于字符串str1str2的前3個(gè)字符相等,所以用strncmp函數(shù)來(lái)比較前3個(gè)以內(nèi)字符,將會(huì)返回邏輯1true)。例如:

>>C = strncmp(str1, str2, 2)      %  比較前兩個(gè)字符

C =

    1

下面介紹如何對(duì)大小寫不同的情況進(jìn)行比較。

>> str3 = 'Hello';

>> D = strncmp(str1, str3,2)                % 對(duì)大小寫敏感

D =

     0

>> F = strncmpi(str1, str3,2)               % 對(duì)大小寫不敏感

F =

     1

用戶可以使用關(guān)系運(yùn)算符進(jìn)行字符串的比較,只要比較的數(shù)組具有相同的尺寸,或者其中一個(gè)是標(biāo)量即可。例如,可以使用(==)運(yùn)算符來(lái)判斷兩個(gè)字符串中有哪些字符相等。

>>A = 'fate';

>>B = 'cake';

>>A == B

ans =

    0   1  0   1

所有的關(guān)系運(yùn)算符都可以用來(lái)比較字符串相對(duì)應(yīng)位置上的字符。

3.3  字符串查找與替換

MATLAB提供了很多函數(shù)供用戶進(jìn)行字符串的查找與替換。更加強(qiáng)大的是,MATLAB也支持在字符串的查找與替換中使用正則表達(dá)式。通過(guò)靈活使用正則表達(dá)式,可以對(duì)字符串進(jìn)行各種形式的查找與替換。至于正則表達(dá)式的應(yīng)用,用戶可以查詢幫助文檔中的Regular Expressions部分。

【例3-8】  使用strrep函數(shù)進(jìn)行字符串查找替換示例。

考慮有這樣一個(gè)標(biāo)簽:

>> label = 'Sample 1, 03/28/15'

label =

Sample 1, 03/28/15

函數(shù)strrep用于實(shí)現(xiàn)一般的查找與替換功能。本例中使用strrep函數(shù),將日期從'03/28'替換為'03/30'。命令如下:

>> newlabel = strrep(label, '28', '30')

newlabel =

Sample 1, 03/30/15

【例3-9】  使用findstr函數(shù)進(jìn)行字符串查找示例。

findstr函數(shù)用于返回某一子串在整個(gè)字符串中的開始位置。例如在字符串中查找字母aoo出現(xiàn)的位置,可以使用如下命令:

>> strtemp='have a good time!'

strtemp =

have a good time!

>> position1= findstr('a', strtemp)

position1 =

     2     6

>> position2 = findstr('oo', strtemp)

position2 =

     9

從本例可以看出,字母a出現(xiàn)在第2和第6兩個(gè)位置,這說(shuō)明findstr函數(shù)返回的位置信息包括所有出現(xiàn)的子串的位置。而字母'oo'字串只出現(xiàn)了一次,所以只返回一個(gè)位置信息。

strtok 函數(shù)用于返回分隔字符第1次出現(xiàn)之前的字符。如果不自行指定分隔字符,默認(rèn)的分隔字符則是泛空格符字符,因此用戶可以使用strtok函數(shù)將一個(gè)句子按照單詞分開。

【例3-10】  使用strtok函數(shù)進(jìn)行字符串查找示例。

>> t='I have walked out on a handful ofmovies in my life.';  %  測(cè)試字符串

>> remain = t;

>> while true                                               % 使用while循環(huán)結(jié)構(gòu)

[str, remain] = strtok(remain);                          %  以默認(rèn)的空格為分隔符查找

if isempty(str), break;  end                          %  循環(huán)跳出控制

disp(sprintf('%s', str))                                %  顯示結(jié)果

end

以下就是使用strtok函數(shù)進(jìn)行多次查找得到的結(jié)果:

I

have

walked

out

on

a

handful

of

movies

in

my

life.

函數(shù)strmatch用于查找一個(gè)字符數(shù)組中以指定子串開始的字符串,該函數(shù)返回的是以指定子串開始的行編號(hào)。

【例3-11】  使用strmatch函數(shù)進(jìn)行字符串查找示例。

>> maxstrings = strvcat('max', 'minimax','maximum') %  測(cè)試字符串?dāng)?shù)組

maxstrings =

   max   

   minimax

   maximum

>> strmatch('max', maxstrings)       %  在測(cè)試字符串?dāng)?shù)組中查找以max開頭的字符串

ans =

     1

     3

在本例中第二行minimax雖然也包含max子串,但是這個(gè)子串的并不是以max開始的,所以在查找過(guò)程中沒有返回第2行為結(jié)果。

3.4 類型轉(zhuǎn)換

MATLAB中允許不同類型的數(shù)據(jù)和字符串類型的數(shù)據(jù)之間進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換需要使用不同的函數(shù)完成。另外,同樣的數(shù)據(jù),特別是整數(shù)數(shù)據(jù),有很多種表示的格式,例如十進(jìn)制、二進(jìn)制或者十六進(jìn)制。在C語(yǔ)言中,需要使用printf函數(shù)通過(guò)相應(yīng)的格式字符串就可以輸出不同格式的數(shù)據(jù)。而在MATLAB中,則直接提供了相應(yīng)的函數(shù)可以完成數(shù)制的轉(zhuǎn)換。表3-2和表3-3分別列舉了這些函數(shù)。

3-2       數(shù)字與字符串之間的轉(zhuǎn)換函數(shù)

函     數(shù)

說(shuō)    明

函    數(shù)

說(shuō)    明

num2str

將數(shù)字轉(zhuǎn)換為字符串

str2num

將字符串轉(zhuǎn)換為數(shù)字

int2str

將整數(shù)轉(zhuǎn)換為字符串

sprintf

格式化輸出數(shù)據(jù)到命令行窗口

mat2str

將矩陣轉(zhuǎn)換為eval函數(shù)可以使用的字符串

sscanf

讀取格式化字符串

str2double

將字符串轉(zhuǎn)換為雙精度類型的數(shù)據(jù)



3-3       不同數(shù)值之間的轉(zhuǎn)換函數(shù)

函    數(shù)

說(shuō)    明

函    數(shù)

說(shuō)    明

hex2num

將十六進(jìn)制整數(shù)字符串轉(zhuǎn)換為雙精度數(shù)據(jù)

dec2bin

將十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)字符串

hex2dec

將十六進(jìn)制整數(shù)字符串轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)

base2dec

將指定數(shù)制類型的數(shù)字字符串轉(zhuǎn)換為十進(jìn)制整數(shù)

dec2hex

將十進(jìn)制數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制整數(shù)字符串

dec2base

將十進(jìn)制整數(shù)轉(zhuǎn)換為指定數(shù)制類型的數(shù)字字符串

bin2dec

將二進(jìn)制整數(shù)字符串轉(zhuǎn)換為十進(jìn)制整數(shù)



在表3-2列舉的數(shù)字與字符串之間的轉(zhuǎn)換函數(shù)中,常用的是num2strstr2num。這兩個(gè)函數(shù)在MATLAB的圖形用戶界面編程中應(yīng)用較多。

【例3-12】  num2str和str2num函數(shù)用法實(shí)例。

>> a=['1 2';'3 4']        % 創(chuàng)建一個(gè)字符串?dāng)?shù)組

a =

1 2

3 4

>> b=str2num(a)        % 將字符串轉(zhuǎn)換為數(shù)值形式

b =

     1     2

     3     4

>> c=str2num('1+2i')         % 將字符串轉(zhuǎn)換為數(shù)值形式

c =

   1.0000 +2.0000i

>> d=str2num('1 +2i')         % 將字符串轉(zhuǎn)換為數(shù)值形式

d =

   1.0000 +0.0000i   0.0000 + 2.0000i>>e=num2str(rand(3,3),6)         %  將數(shù)值轉(zhuǎn)換為字符串形式

e =

0.814724    0.913376     0.278498

0.905792    0.632359     0.546882

0.126987   0.0975404     0.957507

>> whos

  Name      Size            Bytes  Class    Attributes

  a         2x3                12  char               

  b         2x2                32  double             

  c         1x1                16  double   complex  

  d         1x2                32  double   complex  

  e         3x35              210  char               

本例中轉(zhuǎn)換生成變量cd時(shí)得到了不同的結(jié)果,主要原因是在變量d中,數(shù)字 “1”和字符“+2i”之間存在空格,而加號(hào)“+”和數(shù)字“2”之間沒有空格,所以轉(zhuǎn)換的結(jié)果與生成變量c時(shí)不同,創(chuàng)建變量c的時(shí)候,在數(shù)字“1”、加號(hào)“+”和數(shù)字“2”之間都存在空格。為了避免出現(xiàn)上述問(wèn)題,可以使用str2double函數(shù),但是該函數(shù)僅能轉(zhuǎn)換標(biāo)量,不能轉(zhuǎn)換矩陣或者數(shù)組。

使用num2str函數(shù)將數(shù)字轉(zhuǎn)換為字符串時(shí),可以指定字符串所表示的有效數(shù)字位數(shù),詳細(xì)信息可以查閱MATLABhelp文檔。

3.5  字符串應(yīng)用函數(shù)小結(jié)

MATLAB主要以矩陣計(jì)算聞名于世,除此以外該軟件在字符串處理方面也提供了一系列非常強(qiáng)大的函數(shù)。表3-4對(duì)常用字符串函數(shù)進(jìn)行了分類小結(jié)。

3-4       字符串函數(shù)

函    數(shù)

說(shuō)    明

字符串創(chuàng)建函數(shù)

'str'

由單引號(hào)(英文狀態(tài))創(chuàng)建字符串

blanks

創(chuàng)建空格字符串

sprintf

將格式化數(shù)據(jù)寫入字符串

strcat

字符串組合

strvcat

豎直方向字符串組合

字符串修改函數(shù)

deblank

刪除尾部空格

lower

將所有字符小寫

sort

將所有元素升序或降序排列

strjust

字符串對(duì)齊

strrep

字符串替換

strtrim

刪除開始和尾部的泛空格符

upper

將所有字符大寫

字符串的讀取和操作

eval

將一個(gè)字符串作為MATLAB命令執(zhí)行

sscanf

格式讀入字符串


續(xù)表

函    數(shù)

說(shuō)    明

字符串查找替換函數(shù)

findstr

查找子串

strcmp

字符串比較

strcmpi

字符串比較,忽略大小寫

strmatch

查找符合要求的行

strncmp

比較字符串的前N個(gè)字符

strncmpi

比較字符串的前N個(gè)字符,忽略大小寫

strtok

查找某個(gè)字符最先出現(xiàn)的位置


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多