《MATLAB程序設(shè)計基礎(chǔ)教程》課件第6章_第1頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第6章_第2頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第6章_第3頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第6章_第4頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第6章_第5頁
已閱讀5頁,還剩125頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章MATLAB字符串與文件操作6.1字符串與字符串矩陣6.2字符串運算6.3字符串操作6.4字符串顯示、打印與格式轉(zhuǎn)換6.5字符串轉(zhuǎn)換6.6字符串的搜索與替換6.7字符串的比較與判斷6.8字符串執(zhí)行與宏6.9文件操作6.1字符串與字符串矩陣

6.1.1字符串的生成

1.字符串

MATLAB具有強大的數(shù)值處理、符號運算和圖形處理能力等,然而在應(yīng)用中也經(jīng)常需要文本操作和文本處理,例如在繪圖時把標號和標題放在圖上等。文件的打開、關(guān)閉等操作都要使用字符串,在MATLAB中,文本當做特征字符串或簡單地當做字符串來處理。

MATLAB的字符串是由單引號括起來的簡單文本,一個字符串是存儲在一個行向量中的文本,這個行向量中的每一個元素代表一個字符。實際上,元素中存放的是字符的內(nèi)部代碼,也就是ASCII碼。當在屏幕上顯示字符變量的值時,顯示出來的是文本,而不是ASCII數(shù)字。由于字符串是以向量的形式來存儲的,因此可以通過它的下標對字符串中的任何一個元素進行訪問。

字符矩陣也是如此,但是它的每行字符數(shù)必須相同。

由于字符串實際上是ASCII值的數(shù)值數(shù)組,因此可以直接生成字符串,其語法如下:

(1)由單引號確定賦值。

S=‘AnyCharacters’:產(chǎn)生一個字符數(shù)組或字符串,S為字符數(shù)組或字符串的名稱,它實際上是一個向量,其元素是字符的數(shù)值,S的長度是所含字符個數(shù)。如可以使用下面的命令賦值:

>>S=‘Thisisastring!’

S=

Thisisastring!

如果字符串內(nèi)有單引號出現(xiàn),字符串內(nèi)的單引號使用兩個連續(xù)的單引號來表示。例如:

>>v=‘Ican’‘tfindGREEN!’

v=

Ican'tfindGREEN!字符串中的每個字符(含空格)都是字符數(shù)組的一個元素,因此字符串和字符數(shù)組實際上是等價的。

>>s2=['matlab_R2010a']

s2=

matlab_R2010a

(2)?S=[S1S2...]:由字符數(shù)組S1、S2…連接生成一個新的字符數(shù)組S。例如:

>>v='Ican''tfindGREEN!';

>>s2=['matlab_R2010a'];

>>S=[vs2]

S=

Ican'tfindGREEN!matlab_R2010a

MATLAB提供了大量的字符串函數(shù),如表6-1所示。

2.字符串的尺寸

字符串實際是一個字符數(shù)組,在字符串里的每個字符是數(shù)組里的一個元素。同MATLAB的其他變量一樣,字符串的存儲要求每個字符8個字節(jié)。由于ASCII字符只要求一個字節(jié),7/8所分配的存儲空間沒有使用,故這種存儲要求是很浪費的。然而,對字符串保持同樣的數(shù)據(jù)結(jié)構(gòu),可簡化MATLAB的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。用size()函數(shù)可測量字符串的字符數(shù)。例如:

>>t='學習MATLAB,非常有用!';

>>size(t)

ans=

114

測試出字符串t有14個字符,而whos()函數(shù)可以顯示字符串的詳細信息,例如:

>>whos

NameSizeBytesClass

t1x1428chararray

用size()函數(shù)測量出該字符串是一個1?×?14的數(shù)組,由于中文字符占2個字節(jié),因此whos()函數(shù)命令會顯示該數(shù)組占28個字節(jié)。6.1.2字符串矩陣

在MATLAB中,字符串一般是ASCII值的數(shù)值數(shù)組,它作為字符串表達式進行顯示。與普通數(shù)組一樣,字符串也可以形成矩陣,表現(xiàn)為一個字符串有多行,但是這些行的列數(shù)必須相同。如果列數(shù)不同,要用空格補齊以使所有行有相同長度,例如:

>>v=[‘Characterstringshavingmorethan’

‘onerowmusthavethesamenumber’

‘ofcolumnjustlikematrices!’]

v=

Characterstringshavingmorethan

onerowmusthavethesamenumber

ofcolumnjustlikematrices!

1.str2mat()函數(shù)

多個字符串可以用str2mat()函數(shù)構(gòu)造出字符串矩陣。例如:

>>B=str2mat(S,'MARY','GREEN','BUSH')

B=

Thisisastring!

MARY

GREEN

BUSH

每行有同樣數(shù)目的元素,較短行用空格補齊,使結(jié)果形成一個有效的矩陣。

2.char()函數(shù)

使用char()函數(shù)可以創(chuàng)建長度不一致的字符串矩陣。char()函數(shù)自動將所有字符串的長度設(shè)置為輸入字符串中長度的最大值。語法如下:

(1)?S=char(X):將正整數(shù)數(shù)組X轉(zhuǎn)換為MATLAB字符數(shù)組S,X超出0~65?535范圍的數(shù)值是沒定義的。

(2)?S=char(C):當C是串的一個單元數(shù)組時,將其元素排列為字符數(shù)組的行元素。使用cellstr()函數(shù)可以將其轉(zhuǎn)換回來。

(3)?S=?char(t1,t2,t3,..):生成字符數(shù)組S,它包含按行排列的文本串t1、t2、t3...,每一個文本參數(shù)ti,可以是一個字符數(shù)組。char()函數(shù)自動將所有字符串的長度設(shè)置為輸入字符串中長度的最大值,其余串自動用空格填充,這就允許生成任意大小的字符數(shù)組,空串也是合法的。例如:

>>s3=char('M','a','t','l','a','b')

s3=

M

a

t

l

a

b

>>s3'

ans=Matlab

3.列串與strvcat()函數(shù)

strvcat()函數(shù)可生成垂直排列的串,命令格式為strvcat(‘Hello’,‘Yes’),其效果等同于[‘Hello’;‘Yes’]。例如:

>>t1=‘first’;t2=‘string’;t3=‘matrix’;t4=‘second’;

>>S1=strvcat(t1,t2,t3)

S1=

first

string

matrix

>>S2=strvcat(t4,t2,t3)

S2=

second

string

matrix

>>S3=strvcat(S1,S2)

S3=

first

string

matrix

second

string

matrix 6.2字?符?串?運?算

由于字符串一般是ASCII值的數(shù)值數(shù)組,因此可以進行算術(shù)運算。

6.2.1abs()函數(shù)取數(shù)組的絕對值

最簡單和計算上最有效的方法是取數(shù)組的絕對值。函數(shù)abs(t)將字符串t轉(zhuǎn)換為ASCII值的數(shù)值向量。例如:

>>t='學習MATLAB,非常有用!';

>>u=abs(t)

u=23398200647765847665666529238750241202637729992652816.2.2字符串逆轉(zhuǎn)換與setstr()函數(shù)

MATLAB提供了逆轉(zhuǎn)換,可將ASCII值的數(shù)值轉(zhuǎn)換為字符串。

>>v=setstr(u)

v=

學習MATLAB,非常有用!6.2.3字符的加法運算

字符的加法運算實際上是字符ASCII值的加法。

>>abs('O')

ans=79

>>abs('K')

ans=75

>>'O'+'K'

ans=

154

(1)在上節(jié)的例子里,字符串加零,但ASCII值并不改變,逆轉(zhuǎn)換后仍為原字符串。例如:

>>u0=t+0

u0=

2339820064776584

7665666529238750

24120263772999265281

>>setstr(u0)

ans=

學習MATLAB,非常有用!

(2)如果改變了字符串的ASCII值,逆轉(zhuǎn)后已經(jīng)不是原字符串。例如:

>>u1=t+1

u1=

2339920065786685

7766676529338751

24121263782999365282

>>setstr(u1)

ans=

孧鄉(xiāng)NBUMBC-靟帹朊甩"

但在上面的第2個例子里,加1到字符串改變了它的ASCII值,逆轉(zhuǎn)換后已經(jīng)不是原字符串,這里是亂碼。 6.3字?符?串?操?作

6.3.1字符串尋址、編址與子字符串

字符串可以像數(shù)組一樣進行尋址與編址,并生成子字符串。

1.字符串尋址

因為字符串是數(shù)值數(shù)組,它們可以用MATLAB中所有可利用的數(shù)組操作工具進行操作。例如,字符串尋址:

>>u=t(3:end)找出字符串t中,從第3個字符到字符串結(jié)束的子串。

u=

MATLAB,非常有用!

>>u=t(1:8)

找出字符串t中,從第1個字符到第8個字符的子串。

u=

學習MATLAB

2.字符串編址

字符串也可以像數(shù)組一樣進行編址。這里元素3到8包含單詞MATLAB:

>>u=t(8:-1:3)

u=

BALTAM

這是單詞MATLAB的反向拼寫。6.3.2字符串轉(zhuǎn)置

用轉(zhuǎn)置算子將單詞MATLAB變換成一個列。例如:

>>u=t(3:8)‘

u=

M

A

T

L

A

B6.3.3字符串的連接

1.直接連接字符串

字符串連接不可以使用加法符號“+”,但可以直接從數(shù)組連接中得到。例如:

>>t=‘學習MATLAB,非常有用!’;

>>s=‘OK,’;

>>ts=[st]

ts=

OK,學習MATLAB,非常有用!

2.橫向連接字符串

使用strcat()函數(shù)可以實現(xiàn)字符串的橫向連接。語法如下:

S=strcat(S1,S2,...):由S1、S2…連接生成一個新的字符數(shù)組S。S1、S2…,可以是字符數(shù)組或字符串單元數(shù)組,當輸入是字符數(shù)組時,輸出也是字符數(shù)組,函數(shù)自動刪除尾部的白空格,包括空格、回車、換行、tab和verticaltab等ASCII碼;當輸入有字符串的單元數(shù)組時,strcat返回串的單元數(shù)組,函數(shù)不刪除尾部的白空格。

(1)直接連接字符串。例如:

>>st=strcat(s,t)

st=

OK,學習MATLAB,非常有用!

>>a=‘hello,’;b=‘goodbye’;c=‘!’;

>>abc=strcat(a,b,c)

abc=

hello,goodbye!

(2)連接單元字符數(shù)組,所有單元數(shù)組的行數(shù)必須相同,對應(yīng)元素直接連接。例如:

>>a={'abcde','fghi'};b={'jkl','mn'};

>>ab=strcat(a,b)

ab=

'abcdejkl''fghimn'

>>c={'Q'};

>>abc=strcat(a,b,c)

abc=

'abcdejklQ''fghimnQ'

3.縱向連接字符串

使用strvcat()函數(shù)可以實現(xiàn)字符串的縱向連接。語法如下:

S=strvcat(S1,S2,...):由S1、S2…連接生成一個新的字符或串的列數(shù)組S。例如:

>>t1=‘first’;t2=‘string’;t3=‘matrix’;t4=‘second’;

>>S1=strvcat(t1,t2,t3)

S1=

first

string

matrix

>>S2=strvcat(t4,t2,t3)

S2=

second

string

matrix

>>S3=strvcat(S1,S2)

S3=

first

string

matrix

second

string

matrix 6.4字符串顯示、打印與格式轉(zhuǎn)換

6.4.1disp()函數(shù)

函數(shù)disp(X)顯示一個數(shù)組,而不打印數(shù)組名,如果X包含文本串,該串則被顯示。

>>disp('Displaysanarray!')

Displaysanarray!

另一種方法是使用變量顯示,首先使用“X=…”進行賦值,然后調(diào)用該變量進行顯示,函數(shù)disp(X)允許不打印它的變量名而顯示一個字符串。例如:

>>u='Displaysanarray!';

>>disp(u)

Displaysanarray!

注意,函數(shù)disp()不顯示一個空數(shù)組。

6.4.2fprintf()函數(shù)

1.把數(shù)據(jù)寫入文本文件

fprintf()函數(shù)可以把數(shù)據(jù)寫入文本文件,其使用語法如下:

(1)fprintf(fileID,format,A,...):該語句將數(shù)據(jù)A及后面其他參數(shù)中數(shù)字的實部以format指定的格式寫入到fileID指定的文件中,如果A是矩陣,則包括矩陣中的所有元素。

(2)?fprintf(format,A,...):同上。該語句以format指定的格式顯示。

(3)?count=fprintf(fileID,format,A,...):同上。返回寫入數(shù)據(jù)的字節(jié)數(shù)。

上面語句中,各參數(shù)的意義如下:

(1)?fileID是下列取值之一:

從fopen()函數(shù)獲得的文件標識的整型數(shù)字。

1:輸出到標準輸出設(shè)備(顯示器),該值為默認,常省略。

2:標準出錯信息。圖6-1format參數(shù)的選項

(2)參數(shù)format是由單引號括起來的,且以%開頭的串,共由五個部分組成,format參數(shù)的選項如圖6-1所示。

它們分別為:

打頭的“%”與標志符:標志符包括轉(zhuǎn)換符號和子類,用于指示輸出的類型和格式,可以選擇的內(nèi)容如表6-2所示。

標記(flag):為可選部分,用于控制輸出的對齊方式,可以選擇的內(nèi)容如表6-3所示。

寬度和精度指示,為可選部分。用戶可以通過數(shù)字指定輸出數(shù)字的寬度及精度,格式如下:

%6f,指定數(shù)字的寬度位數(shù);

%6.2f,指定數(shù)字的寬度及精度;

%.2f,指定數(shù)字的精度。

要打印(顯示)的文本。

結(jié)束符號,為必需部分。包括轉(zhuǎn)義符,轉(zhuǎn)義符用于指定輸出的符號,可以選擇的內(nèi)容如表6-4所示。

例6-4-1

利用fprintf()函數(shù)在顯示器上輸出字符串“It'sFriday.”

解程序如下:

>>fprintf(1,'It''sFriday.\n')

It'sFriday.

在該例中,利用1表示顯示器,格式中用兩個單引號顯示一個單引號,并且使用\n進行換行。

>>fprintf('PrintingtheDocumentation!')

PrintingtheDocumentation!>>在上面例子里,fprintf顯示字符串,然后立即給出MATLAB提示符。如果在該例子里,使用“\n”插入一個換行符,則在MATLAB提示符出現(xiàn)之前創(chuàng)建一個新行。

>>fprintf('PrintingtheDocumentation!\n')

PrintingtheDocumentation!

>>B=[8.87.7;...

88007700];

fprintf('Xis%4.2fmetersor%8.3fmm\n',9.9,9900,B)

Xis9.90metersor9900.000mm

Xis8.80metersor8800.000mm

Xis7.70metersor7700.000mm

%號前面的是要顯示的文本,B是矩陣。

2.顯示文本

fprintf()函數(shù)經(jīng)常代替disp()函數(shù)。默認情況下,fprintf()函數(shù)把格式化的數(shù)據(jù)寫到當前的命令窗口顯示結(jié)果。fprintf()函數(shù)的使用語法如下:

(1)?fprintf(text):fprintf()函數(shù)以默認的格式顯示文本text的內(nèi)容。

(2)?fprintf(format,var):var的內(nèi)容以format指定的格式顯示。

>>fprintf('HelloChina!');

顯示結(jié)果:HelloChina!>>

加上換行符號:

>>fprintf('HelloChina!\n');

顯示結(jié)果:HelloChina!6.4.3sprintf()函數(shù)

無論是fprintf()還是sprintf()函數(shù),都以同樣的方式處理輸入?yún)⒘浚玣printf()把輸出送到顯示屏或文件中,而sprintf()則把輸出返回到一個字符串中。

sprintf()函數(shù)的語法如下:

[s,errmsg]=sprintf(format,A,...)

其中,s是sprintf()輸出返回的字符串,errmsg是出錯信息,如果沒有出錯信息,則errmsg是一個空矩陣。format參數(shù)是一個包含C語言轉(zhuǎn)換特性的串,矩陣A中的數(shù)據(jù)按照format參數(shù)的格式進行轉(zhuǎn)換。

%是格式符號的開始標記,其他符號的意義與fprintf()函數(shù)的意義相同。

例如:

>>p=sprintf('%-8.5g\n',pi);

>>disp(p)

3.1416

>>p=sprintf('%+8.5g\n',pi);

>>disp(p)

+3.1416

>>p=sprintf('%08.5g\n',pi);

>>disp(p)

003.1416

>>t=sprintf('半徑為%4g的圓,其面積為:%4g。',rad,area);

>>disp(t)

半徑為2.5的圓,其面積為19.635。

>>t=sprintf('半徑為%.4g的圓,其面積為:%.4g。',rad,area);

>>disp(t)

半徑為2.5的圓,其面積為19.63。

當需要比缺省函數(shù)disp()、num2str()和int2str()所提供的更多的控制時,使用fprintf()和sprintf()是比較方便的。

注意,對e和f格式,小數(shù)點右邊的十進制數(shù)就是小數(shù)點右邊要顯示的多少位數(shù)字。相反,在g的格式里,小數(shù)點右邊的十進制數(shù)指定了顯示數(shù)字的總位數(shù)。另外,注意最后的五行,其結(jié)果指定為8個字符長度,且是右對齊。在最后一行,8被忽略,因為指定超過了8位。 6.5字?符?串?轉(zhuǎn)?換

6.5.1數(shù)字轉(zhuǎn)換成字符串

函數(shù)int2str()和num2str()把數(shù)值轉(zhuǎn)換成字符、字符串或字符變量,這些函數(shù)是很有用的,例如:

把數(shù)值轉(zhuǎn)換成字符串,作為繪圖的題頭或標簽;

字符串連接用來把所轉(zhuǎn)換的數(shù)嵌入到一個字符串句子中。

1.int2str()函數(shù)將整形數(shù)轉(zhuǎn)換為字符

int2str()函數(shù)將整型數(shù)轉(zhuǎn)換為字符、字符串或字符變量,命令形式如下:

(1)

str=int2str(N):把整型數(shù)值N轉(zhuǎn)換成字符、字符串str,N可以是單個數(shù)字、向量、數(shù)組、矩陣或表達式。例如:

>>int2str(2+3)

ans=5

(2)?s=int2str(x):將數(shù)x轉(zhuǎn)換為字符變量s。當x是普通有理數(shù)時,將對其四舍五入后再進行轉(zhuǎn)換。當x是復數(shù)時,將只對其實部進行轉(zhuǎn)換。例如:

>>x1=19;s1=int2str(x1)

s1=19

>>x2=2.4;

>>s2=int2str(x2) %先把變量x2四舍五入,然后再轉(zhuǎn)換為字符型變量s2

s2=2

>>x3=2.9+5*i; %變量x3是復數(shù),只對其實部進行轉(zhuǎn)換,對其四舍五入后再進行轉(zhuǎn)換

>>s3=int2str(x3)

s3=3

2.num2str()函數(shù)將數(shù)值轉(zhuǎn)換為字符

num2str()函數(shù)可以將數(shù)值轉(zhuǎn)換為字符、字符串,也可以用于將普通數(shù)值變量轉(zhuǎn)換為字符變量。函數(shù)num2str()的使用方法如下:

(1)?str=num2str(A):轉(zhuǎn)換數(shù)組A為串表達式str。轉(zhuǎn)換浮點數(shù)的最大精度為4位小數(shù),如果需要可以轉(zhuǎn)換為指數(shù)形式。對于整型數(shù)值,num2str()返回該值精確的字符串值。

(2)?str=num2str(A,precision):precision指定轉(zhuǎn)換的精度。

(3)?str=num2str(A,format):使用format提供的格式轉(zhuǎn)換數(shù)組A為串表達式str。與fprintf()函數(shù)類似,默認使用“%11.4g”格式,轉(zhuǎn)換浮點數(shù)的最大精度為4位小數(shù),如果需要可以轉(zhuǎn)換為指數(shù)形式。

(4)?s=num2str(x):將普通數(shù)值x轉(zhuǎn)換為字符變量s。規(guī)則是在int2str()命令中對x的限制則全部取消,這條命令在圖形與圖例的標注中非常有用。

無論是num2str()還是int2str()都需調(diào)用函數(shù)sprintf(),它用類似C語言的語法把數(shù)值轉(zhuǎn)換成字符串。例如:

希望把一個數(shù)值嵌入到字符串中:

>>rad=2.5;area=pi*rad^2;

>>t=['半徑為'num2str(rad)'的圓,其面積為:'num2str(area)'。'];

>>disp(t)

半徑為2.5的圓,其面積為:19.635。

把數(shù)值轉(zhuǎn)換成字符串,作為繪圖的題頭或標簽:

>>title(['casenumber'int2str(n)])6.5.2字符串轉(zhuǎn)換成數(shù)字

在字符串轉(zhuǎn)換成數(shù)字的逆方向轉(zhuǎn)換中,使用str2num()函數(shù)是很方便的。串可以是普通的數(shù)字串、小數(shù)串、帶符號的數(shù)字串、冪或比例因子串,以及復數(shù)串等。命令形式如下:

x=str2num(s):把字符串變量

s轉(zhuǎn)化為數(shù)值

x。當

s是一個包含非數(shù)字的字符變量時,str2num(s)將返回一個空矩陣[]。例如:

>>s='123e+5'; %astringcontainingasimplenumber

>>a=str2num(s)

a=12300000

>>class(a)

ans=double

>>s2='12a'; %字符串變量s2包含非數(shù)字的字符變量a

>>x2=str2num(s2)

x2=

[]使用str2num()函數(shù)也可以轉(zhuǎn)換字符矩陣。例如:

>>s='[12;pi4]';%astringofaMATLABmatrix

>>str2num(s)

ans=

1.00002.0000

3.14164.0000

函數(shù)str2num()既不能接受用戶定義的變量,也不能執(zhí)行轉(zhuǎn)換過程的算術(shù)運算。6.5.3字符的大小寫轉(zhuǎn)換

下面將舉例說明把一個字符串轉(zhuǎn)換成大寫的過程。首先,函數(shù)find()找出小寫字符的下標值;然后,從小寫元素中減去小寫與大寫之差;最后,用setstr()函數(shù)把求得的數(shù)組轉(zhuǎn)換成它的字符串表示。

>>u='IfYouAreUsingMATLABfortheFirstTime';

>>disp(u)

IfYouAreUsingMATLABfortheFirstTime

>>i=find(u>='a'&u<='z')

i=

Columns1through11

3671011141516172627

Columns12through22

2830313235363738414243

>>u(i)=setstr(u(i)-('a'-'A'))

u=

IFYOUAREUSINGMATLABFORTHEFIRSTTIME

使用upper()、lower()函數(shù)可以直接實現(xiàn)字符的大小寫轉(zhuǎn)換,例如:

>>u='IfYouAreUsingMATLABfortheFirstTime';

>>U=upper(u)

U=

IFYOUAREUSINGMATLABFORTHEFIRSTTIME

>>lower(U)

ans=

ifyouareusingmatlabforthefirsttime6.6字符串的搜索與替換6.6.1strtok()函數(shù)使用strtok()函數(shù)可以尋找出字符串中由特定字符指定的、第一次出現(xiàn)的標記前面的字符,空格是缺省限定字符,其語法如下:

token=strtok('str')

token=strtok('str',delimiter)

[token,rem]=strtok(...)

(1)?token=strtok('str'):使用默認的限定符(白空格,包括ASCII9的tab、ASCII13的回車和ASCII32的空格),白空格前面的任何限定符都被忽略。如果str是一個串的單元數(shù)組,則token是標記的單元數(shù)組。例如:

>>s='Thisisasimpleexample.';

>>token=strtok(s)

返回串中第一個空格前的字符串:

token=

This

(2)?token=strtok('str',delimiter):返回文本串str的第一個標記,向量delimiter使用所有合法的限定符號,delimiter前面的任何限定符都被忽略。

>>token=strtok(s,'a')

返回串中第一個限定符a前的字符串:

token=

Thisis

>>token=strtok(s,'s')

返回串中第一個限定符s前的字符串:

token=

Thi

(3)?[token,rem]=strtok(...):返回字符串的剩余部分,如果str是一個串的單元數(shù)組,則token是標記的單元數(shù)組,rem是字符數(shù)組。例如:

>>[token,rem]=strtok(s,'a')

token=

Thisis

rem=

asimpleexample.6.6.2strfind()和findstr()函數(shù)

1.strfind()函數(shù)

使用strfind()函數(shù)在長字符串s1內(nèi)找出短字符串s2,其語法如下:

k=strfind(str1,str2):findstr()函數(shù)大小寫敏感,在雙精度數(shù)組k中返回每個子字符串s2出現(xiàn)的開始索引值,如果沒有找到s2或者字符串s2的長度大于字符串s1則返回空數(shù)組。例如:

>>s='Thisisasimpleexample.';

>>k=strfind(s,'s')

k=

6913

2.findstr()函數(shù)

findstr()函數(shù)用于在一個字符串s1中查找子字符串s2,返回子字符串的起始位置下標值,執(zhí)行時系統(tǒng)首先判斷兩個字符串的長短,然后在長的字符串中檢索短的子字符串。語法如下:

k=findstr(str1,str2):findstr()函數(shù)大小寫敏感,在雙精度數(shù)組k中返回每個子字符串s2出現(xiàn)的開始索引值,當不匹配時,如果沒有找到則返回空數(shù)組,findstr()函數(shù)對字符串矩陣不起作用。例如:

>>k=findstr(s,'s')

k=

6913與strfind()函數(shù)不同之處是,findstr()函數(shù)的兩個輸入?yún)?shù)的次序無關(guān)緊要,這在不知道兩個輸入串哪個長哪個短的情況下是非常有用的。例如:

>>s='Findthestartingindicesoftheshorterstring.';

>>findstr(s,'the')

ans=

630

>>findstr('the',s)

ans=

630

3.strmatch()函數(shù)

strmatch()函數(shù)在字符數(shù)組的每一行中查找是否存在待查找的字符串,存在則返回1,否則返回0。語法為:

strmatch('str',STRS):查找str中以STRS開頭的字符串。另外,可以用strmatch('str',

STRS,'exact'),查找精確包含STRS的字符串。6.6.3字符串的替換

strrep()函數(shù)執(zhí)行簡單的字符串替代,用于查找字符串中的子字符串,并將其替換為另一個子字符串。該函數(shù)對字符串矩陣不起作用。語法如下:

str=strrep(str1,str2,str3):用串str3替換在串str1中出現(xiàn)的所有字符或字符串str2。例如:

>>b='PeterPiperpickedapeckofpickledpeppers';

>>strrep(b,'p','P')

ans=

PeterPiPerPickedaPeckofPickledPePPers

>>strrep(b,'Peter','Pamela')

ans=

PamelaPiperpickedapeckofpickledpeppers 6.7字符串的比較與判斷

6.7.1字符串的比較

1.strcmp()、strcmpi()函數(shù)使用strcmp()、strcmpi()函數(shù)可進行字符串比較,strcmp()函數(shù)對大小寫敏感,而strcmpi()函數(shù)對大小寫不敏感。語法如下:

(1)?TF=strcmp('str1','str2'):用于比較兩個字符串是否相同。比較串str1與str2,如果相同,則TF為1(真);否則為0(假),即str1與str2不相同。當所比較的兩個字符串是單元字符數(shù)組時,返回值為一個列向量,元素為相應(yīng)行比較的結(jié)果。

(2)?TF=strcmp(‘str’,C):串str與單元矩陣C中的每一個元素比較,str是一個字符向量或1?×?1的單元矩陣,C是一個串單元矩陣。TF是與C的維數(shù)相同的矩陣,如果比較結(jié)果相同則TF中該元素為1(真),否則為0(假)。該函數(shù)要比較的兩個輸入?yún)?shù)的次序是無關(guān)緊要的,即比較結(jié)果與兩個輸入?yún)?shù)的次序無關(guān)。

(3)?TF=strcmp(C1,C2):單元矩陣C1與單元矩陣C2中的每一個對應(yīng)元素比較,TF、C1和C2的大小相同。TF是與C1、C2的維數(shù)相同的、元素為邏輯值0、1的矩陣,如果比較結(jié)果相同則TF中該元素為1(真),否則為0(假)。

strcmpi()函數(shù)的使用方法與此相同。例如,比較字符串:

>>strcmp('Yes','No')

ans=

0

>>strcmp('Yes','Yes')

ans=

1

>>strcmp('Yes','yes')

ans=

0

>>strcmpi('Yes','yes')

ans=

1例如,比較單元數(shù)組元素:

>>B={'HandleGraphics','RealTimeWorkshop';

'Toolboxes','TheMathWorks'};

C={'handlegraphics','SignalProcessing';

'Toolboxes','TheMATHWORKS'};

>>TF0=strcmpi('HandleGraphics',C)

TF0=

10

00

>>TF1=strcmpi(B,C)

TF1=

10

01

>>TF2=strcmp(B,C)

TF2=

00

00

2.strncmp()、strncmpi()函數(shù)

使用strncmp()、strncmpi()函數(shù)可進行字符串中的前幾個字符比較,strncmp()函數(shù)對大小寫敏感,而strncmpi()函數(shù)對大小寫不敏感。語法如下:

(1)?TF=strncmp('str1','str2',n):串str1的前n個字符與str2比較,如果相同則TF為1(真),否則為0(假)。當所比較的兩個字符串是單元數(shù)組時,返回值為列向量,元素為相應(yīng)行比較的結(jié)果。

(2)?TF=strncmp('str',C,n):串str的前n個字符與單元矩陣C中的前n個元素比較,str是一個字符向量或1?×?1的單元矩陣,C是一個串單元矩陣。TF是與C的維數(shù)相同的矩陣,如果比較結(jié)果相同,則TF中該元素為1(真),否則為0(假)。該函數(shù)要比較的兩個輸入?yún)?shù)的次序是無關(guān)緊要的,即比較結(jié)果與兩個輸入?yún)?shù)的次序無關(guān)。

(3)?TF=strncmp(C1,C2,n):單元矩陣C1的前n個元素與單元矩陣C2中的前n個元素比較,TF、C1和C2的大小相同。TF是與C1、C2的維數(shù)相同的、元素為邏輯值0、1的矩陣,如果比較結(jié)果相同則TF中該元素為1(真),否則為0(假)。

例如:

>>A='MATLAB',B='MathWorks',C={'handlegraphics','SignalProcessing';

'Toolboxes','TheMATHWORKS'};

>>strncmpi(A,B,3)

ans=

1

>>strncmp(A,B,3)

ans=

0

>>T=strncmpi('HandleGraphics',C,4)

T=

10

00

3.通過簡單運算比較兩個字符串

除了利用上面4個函數(shù)進行比較之外,還可以通過簡單運算比較兩個字符串。當兩個字符串擁有相同的維數(shù)時,可以利用MATLAB運算法則,對字符數(shù)組進行比較。

字符數(shù)組的比較與數(shù)值數(shù)組的比較基本相同,不同之處在于字符數(shù)組比較時進行比較的是字符的ASCII碼值。進行比較返回的結(jié)果為一個數(shù)值向量,元素為對應(yīng)字符比較的結(jié)果。需要注意的是,在利用這些運算比較字符串時,相互比較的兩個字符串必須有相同數(shù)目的元素。比較字符串的運算符號和意義如表6-7所示。6.7.2字符串判斷

除上面介紹的兩個字符串之間的比較之外,MATLAB還可以判斷字符串中的字符是否為空格字符或者字母。實現(xiàn)這兩個功能的函數(shù)分別為isspace()和isletter()。

(1)??isspace():用法為isspace(str),判斷字符串str中的字符是否為空格,是空格字符則返回1,否則返回0。

(2)isletter():用法為isletter(str),判斷字符串str中的字符是否為字母,是字母則返回1,否則返回0。 6.8字符串執(zhí)行與宏

6.8.1eval()函數(shù)與字符串求值

函數(shù)eval()提供MATLAB宏的能力,該函數(shù)執(zhí)行由串組成的MATLAB命令表達式,提供了將用戶創(chuàng)建的函數(shù)名傳給其他函數(shù)的能力,以便求值。相當于把字符串中的字符賦予它的實際內(nèi)容,當被求值的字符串是由子字符串連接而成,或?qū)⒆址畟鹘o一個函數(shù)以求值時,eval非常有用。命令eval使得MATLAB成為一個可靈活編程的語言,比如這個命令用來調(diào)用MATLAB中沒有預(yù)定義的函數(shù)。

eval()語法如下:

(1)eval(expression):執(zhí)行MATLAB命令表達式expression,expression可以由包含在中括號內(nèi)的子串、變量組成。

expression=[string1,int2str(var),string2,...]

應(yīng)用例子如:

>>d='cd';

>>eval(d);

D:\MyDocuments\MATLAB

>>a=eval('sqrt(2)')

a=

1.4142

>>eval('a=sqrt(2)')

a=

1.4142

(2)?[a1,a2,a3,...]=eval('myfun(b1,b2,b3,...)'):執(zhí)行參數(shù)為b1,b2,b3,...的MATLAB函數(shù)smyfun,并將結(jié)果返回到指定的變量a1,a2,a3,...中。

例6-8-1向MATLAB工作空間加載系列MAT文件August1.mat~August10.mat。程序如下:

ford=1:10

s=['loadAugust'int2str(d)'.mat']

eval(s)

end運行結(jié)果是逐個加載文件,如果該文件保存在當前目錄下,就被加載,否則如果該文件沒有保存在當前目錄下,或不存在該文件將會出錯。

s=

loadAugust1.mat

s=

loadAugust2.mat

s=

loadAugust3.mat

…例6-8-2在MATLAB工作空間生成系列變量名,并使用eval()函數(shù)為每一個變量賦值。程序如下:

fork=1:5

t=clock;

pause(uint8(rand*10));

v=genvarname('time_elapsed',who);

eval([v'=etime(clock,t)'])

end運行結(jié)果如下:

time_elapsed=9.0620

time_elapsed1=9.0150

time_elapsed2=1

time_elapsed3=9.0160

time_elapsed4=6.0000

如果字符串傳遞到eval()不能被辨認,MATLAB提供下列語法:

>>eval('a=sqrtt(2)','a=[]')

a=

[]6.8.2feval()函數(shù)

函數(shù)feval()與eval()類似,但在用法上有更多的限制。feval('fun',x)求由字符串“fun”給定的函數(shù)值,其輸入?yún)⒘渴亲兞縳,即feval('fun',x)等價于求fun(x)值。例如:

>>a=feval('sqrt',2)

a=1.4142

函數(shù)eval()、feval()的基本用途限定在用戶創(chuàng)建的函數(shù)內(nèi)。一般地,feval()可求出有多個輸入?yún)⒘康暮瘮?shù)值,例如,feval('fun',x,y,z)等價于求fun(x,y,z)值。例6-8-3在MATLAB工作空間生成3個函數(shù),用戶選擇一種函數(shù),并輸入自變量值,使用feval()函數(shù)為每一個變量賦值。程序如下:

fun=['sin';'cos';'log'];

k=input('Choosefunctionnumber:');

x=input('Entervalue:');

feval(fun(k,:),x)

運行結(jié)果如下:

Choosefunctionnumber:2

Entervalue:6

ans=0.9602

Choosefunctionnumber:3

Entervalue:6

ans=1.7918

6.9文件操作

6.9.1文件、數(shù)據(jù)的存儲

1.保存整個工作區(qū)

把MATLAB工作空間中一些有用的數(shù)據(jù)長久保存下來的方法是生成MAT數(shù)據(jù)文件。

點擊“File”菜單中的“SaveWorkspaceAs…”選項,或者點擊工作區(qū)瀏覽器工具欄中的“Save”按鈕,可以將工作區(qū)中的變量保存為MAT文件。

2.保存工作區(qū)中的變量

在工作區(qū)瀏覽器中,右鍵單擊需要保存的變量名,選擇“SaveAs…”菜單項,將該變量保存為MAT文件。

3.利用save命令保存

save命令可以保存工作區(qū)或工作區(qū)中任何的指定文件。save命令的調(diào)用格式如下:

(1)?save

filename...:將工作區(qū)中的所有變量保存在當前工作區(qū)中的文件中,如果不指定文件名的擴展名,則默認為MAT文件;如果不指定文件名和擴展名,則默認文件名為“matlab.mat”,MAT文件可以通過load()函數(shù)再次導入工作區(qū),MAT函數(shù)可以被不同的機器導入,甚至可以通過其他的程序調(diào)用。例如:

>>savedata:將工作空間中所有的變量存入“data.mat”文件中。

>>savedataab:將工作空間中a和b變量存入“data.mat”文件中。下次運行MATLAB時即可用load指令調(diào)用已生成的MAT文件。

MAT文件是標準的二進制文件,還可以ASCII碼形式保存或加載。例如:

>>savedataab–ascii

>>loaddataab–ascii

以二進制的方式儲存變量,通常檔案會比較小,而且在載入時速度較快,但是無法用普通的文本軟件(例如記事本等)看到檔案內(nèi)容。若想看到檔案內(nèi)容,則必須加上-ascii選項。

>>savefilenamex-ascii:將變量x以八位數(shù)存到名為filename的ASCII檔案。

二進制和ASCII檔案的比較:

在save命令使用-ascii選項后,會有以下現(xiàn)象:

對于相同的變量,ASCII檔案通常比二進制檔案大。

save命令就不會在檔案名稱后加上MAT的擴展名。因此以擴展名MAT結(jié)尾的檔案通常是MATLAB的二進制資料檔。

通常只儲存一個變量。若在save命令中加入多個變量,仍可執(zhí)行,但所產(chǎn)生的檔案則無法以簡單的load命令載入。參閱有關(guān)load命令的用法。

原有的變量名稱消失。因此在將檔案以load載入時,會取用檔案名稱為變量名稱。

對于復數(shù),只能儲存其實部,而虛部則會消失。

若非有特殊需要,我們一般應(yīng)該盡量以二進制方式儲存資料。

(2)?save('filename'):將工作區(qū)中的所有變量保存為MAT文件,文件名由字符串filename指定。如果filename中包含路徑,則將文件保存在相應(yīng)目錄下,否則默認路徑為當前路徑。

(3)?save('filename','var1','var2',...):保存指定的變量在filename指定的文件中。

(4)?save('filename','-struct','s'):保存結(jié)構(gòu)體s中全部域作為單獨的變量。

(5)?save('filename','-struct','s','f1','f2',...):保存結(jié)構(gòu)體s中的指定變量。

(6)?save('-regexp',expr1,expr2,...):通過正則表達式指定待保存的變量需滿足的條件。

(7)?save('...,'format'):指定保存文件的格式,格式可以為MAT文件、ASCII文件等。6.9.2數(shù)據(jù)導入

1.函數(shù)load()

在MATLAB中,導入數(shù)據(jù)通常由函數(shù)load()實現(xiàn),該函數(shù)的用法如下:

(1)?load:如果matlab.mat文件存在,導入matlab.mat中的所有變量,如果不存在,返回error;

(2)?loadfilename:將filename中的全部變量導入到工作區(qū)中;

(3)?loadfilenameXYZ...:將filename中的變量X、Y、Z等導入到工作區(qū)中,如果文件為MAT文件,在指定變量時可以使用通配符“*”;

(4)?loadfilename-regexpexpr1expr2...:通過正則表達式指定需要導入的變量;

(5)?load-asciifilename:無論輸入文件名是否包含有擴展名,將其以ASCII格式導入,如果指定的文件不是數(shù)字文本,則返回error;

(6)?load-matfilename:無論輸入文件名是否包含有擴展名,將其以mat格式導入,如果指定的文件不是MAT文件,則返回error。

2.函數(shù)importdata()

在MATLAB中,另一個導入數(shù)據(jù)的常用函數(shù)為importdata(),與load()函數(shù)不同,importdata()將文件中的數(shù)據(jù)以結(jié)構(gòu)體的方式導入到工作區(qū)中。該函數(shù)的用法如下:

(1)?importdata('filename'):將filename中的數(shù)據(jù)導入到工作區(qū)中。

(2)?A=importdata('filename'):將filename中的數(shù)據(jù)導入到工作區(qū)中,并保存為變量A。

(3)?importdata('filename','delimiter'):將filename中的數(shù)據(jù)導入到工作區(qū)中,以delimiter指定的符號作為分隔符。6.9.3文件的打開

在MATLAB中,可以使用open命令打開各種格式的文件,MATLAB自動根據(jù)文件的擴展名選擇相應(yīng)的編輯器。open()函數(shù)的用法如下:

open('name'):打開一個名稱由字符串name指定的對象。打開后采取的具體操作取決于對象的類型。例如:

>>opencopyfile.m

>>open('D:\temp\data.mat')

需要注意open('filename.mat')和load('filename.mat')的不同,前者將filename.mat以結(jié)構(gòu)體的方式打開在工作區(qū)中,后者將文件中的變量導入到工作區(qū)中,如果要訪問其中的內(nèi)容,則需以不同的格式進行。6.9.4文本文件的讀/寫

在上一節(jié)中介紹的函數(shù)和命令主要用于讀/寫mat文件。在實際應(yīng)用中,經(jīng)常需要讀/寫更多格式的文件,如文本文件(txt)、word文件、xml文件、xls文件及圖像、音/視頻文件等。

在MATLAB中,實現(xiàn)文本文件讀/寫的函數(shù)如表6-8所示。

1.fscanf()函數(shù)

讀取ASCII文本文件的用法如下:

A=fscanf(fid,format):從fid所指定的文件讀取的所有數(shù)據(jù),將它轉(zhuǎn)換為字符串format指定的格式,并將其返回矩陣A中。參數(shù)fid是整數(shù)型文件標識符,從fopen操作中獲得。

2.csvread()函數(shù)

csvread()函數(shù)讀取逗號分隔值的文件。用法如下:

(1)?M=csvread('filename'):將文件filename中的數(shù)據(jù)讀入,并且保存為M,filename中只能包含數(shù)字,并且數(shù)字之間以逗號分隔。M是一個數(shù)組,行數(shù)與filename的行數(shù)相同,列數(shù)為filename列的最大值,對于元素不足的行,以0補充。

(2)?M=csvread('filename',row,col):讀取文件filename中的數(shù)據(jù),起始行為row,起始列為col。需要注意的是,此時的行列從0開始。

(3)?M=csvread('filename',row,col,range):讀取文件filename中的數(shù)據(jù),起始行為row,起始列為col,讀取的數(shù)據(jù)由數(shù)組range指定,range的格式為?[R1C1R2C2],其中,R1、C1為讀取區(qū)域左上角的行和列,R2、C2為讀取區(qū)域右下角的行和列。例如:

csvlist.dat

02,04,06,08,10,12

03,06,09,12,15,18

05,10,15,20,25,30

07,14,21,28,35,42

11,22,33,44,55,66

>>csvread('csvlist.dat')

ans=

24681012

369121518

51015202530

71421283542

112233445566

3.dlmread()函數(shù)

dlmread()函數(shù)讀取以ASCII分隔值的文件。用法如下:

M=dlmread('filename')

M=dlmread('filename',delimiter)

M=dlmread('filename',delimiter,R,C)

M=dlmread('filename',delimiter,range)

其中,參數(shù)delimiter()用于指定文件中的分隔符,其他參數(shù)的意義與csvread()函數(shù)中參數(shù)的意義相同,這里不再贅述。dlmread()函數(shù)與csvread()函數(shù)的差別在于,dlmread()函數(shù)在讀入數(shù)據(jù)時可以指定分隔符,不指定時默認分隔符為逗號。

4.dlmwrite()函數(shù)

dlmwrite()函數(shù)將矩陣數(shù)據(jù)寫入以ASCII分隔值的文件中。用法如下:

dlmwrite('filename',M):將矩陣M的數(shù)據(jù)寫入文件filename中,默認以逗號分隔;

dlmwrite('filename',M,'D'):將矩陣M的數(shù)據(jù)寫入文件filename中,采用指定的分隔符D分隔數(shù)據(jù),如果需要tab鍵,可以用“\t”指定;

dlmwrite('filename',M,'D',R,C):指定寫入數(shù)據(jù)的起始位置;

dlmwrite('filename',M,attribute1,value1,attribute2,value2,...):指定任意數(shù)目的參數(shù),可以指定的參數(shù)如表6-9所示;

dlmwrite('filename',M,'-append'):如果filename指定的文件存在,在文件后面寫入數(shù)據(jù),不指定時則覆蓋原文件。

dlmwrite('filename',M,'-append',attribute-valuelist):敘寫文件,并指定參數(shù)。

dlmwrite():函數(shù)的可用參數(shù)如表6-9所示。

textread、textscan:當文件的格式已知時,可以利用textread()函數(shù)和textscan()函數(shù)讀入。6.9.5低層文件I/O操作

1.打開和關(guān)閉文件

打開和關(guān)閉文件分別使用fopen()、fclose()函數(shù)。

(1)?fopen()函數(shù)。語法及功能如下:

fid?=?fopen(filename):打開文件名為filename的文件,用于讀/寫,返回一個integer類型的文件標識fid。

文件標識符號fid是一個整型數(shù)值,MATLAB分別識別文件標識符fid為0是標準輸入、1是標準輸出(屏幕)和2是標準錯誤。如果fopen()函數(shù)打不開文件,fid=-1。如果fopen()函數(shù)打開文件成功,fid大于或等于3。

fid=fopen(filename,permission):permission是一個字符串,描述訪問的文件類型的字符串:讀取、寫入、追加或更新,指定是以二進制或文本模式打開文件。permission的具體內(nèi)容和意義如表6-11所示。

fid=fopen(filename,permission,machineformat):machineformat是一個串,指定文件以字節(jié)或位讀/寫的次序,用于不同的操作系統(tǒng)。

[fid,message]=fopen(filename,…):message是依賴不同操作系統(tǒng)所提供的出錯信息。

fid=fopen('all'):fid是一個向量,代表所有打開文件的標識。

[filename,permission,machineformat]=fopen(fid):返回所打開文件的各種信息。

(2)?fclose()函數(shù)。

status=fclose(fid):此處的fid的意義與fopen()函數(shù)中的意義相同,即把在fopen()函數(shù)中以文件標識符號為fid的文件關(guān)閉。

status=fclose('all'):此處的all的意義與fopen()函數(shù)中的意義相同,即把在fopen()函數(shù)中以文件標識符號為fid的列向量所代表的所有文件關(guān)閉。

例:打開一個名為std.dat的數(shù)據(jù)文件并進行讀操作的命令為

fid=fopen('my.txt','r')

2.文件定位和狀態(tài)

文件定位和狀態(tài)使用feof()、fseek()、ftell()、ferror()、frewind()等函數(shù),使用方法與C語言相同。

3.二進制文件的讀/寫

可使用fread()和fwrite()函數(shù)進行二進制文件的讀/寫。

(1)?fread():從文件中讀取二進制數(shù)據(jù)。語法如下:

A=fread(fid)

A=fread(fid,count)

A=fread(fid,count,precision)

A=fread(fid,count,precision,skip)

A=fread(fid,count,precision,skip,machineformat)

[A,count]=fread(...)從fid指定的文件中讀取二進制格式數(shù)據(jù)到矩陣A,在調(diào)用fread之前先使用fopen打開文件。參數(shù)fid是整數(shù)型文件標識符,從fopen操作中獲得。MATLAB從頭到尾完整讀取該文件,然后將文件指針定位在文件的末尾。

count是一個可選項,指定讀取的元素數(shù),如果不指定該參數(shù),則讀取整個文件。字符串precision指定文件所讀取的精度格式,默認為無符號的字符格式uchar。如果包括一個可選項skip參數(shù),指定讀取每個precision值后要跳過的字節(jié)數(shù)。如果precision指定一個位格式,如?'bitN'?或?'ubitN',skip參數(shù)將被解釋為跳過的位數(shù)。例如:

fid=fopen('std.dat','r');

A=fread(fid,100,'long');

Sta=fclose(fid);

以“讀”數(shù)據(jù)形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論