matlab单元数组和结构,Matlab使用单元数组和结构数组
Matlab使用字符串數(shù)組、單元數(shù)組(cell array)和結構數(shù)組 (struct array)
要在MALTAB中實現(xiàn)比較復雜的編程,就不能不用單元數(shù)組(cell array)和結構數(shù)組(structarray)。而且在Matlab中實現(xiàn)struct比C中更為方便。
MATLAB字符串數(shù)組的創(chuàng)建與運算
字符串數(shù)組主要用于可視化編程內(nèi)容,如界面設計和圖形繪制。
1.字符串變量的創(chuàng)建
字符變量的創(chuàng)建方法是:在指令窗口中先把待建的字符放在“單引號對”中,再按回車鍵。注意,該“單引號對”必須在英文狀態(tài)下輸入。這“單引號對”是MATLAB用來識別字符串變量所必須的。如:
>>a='This is an example.' a =
This is an example.
>>msg = 'You''re right!' %創(chuàng)建帶單引號的字符串 msg =
You're right!
2.字符串數(shù)組的標識
字符串變量的每個字符(英文字母、空格和標點都是平等的)占據(jù)一個元素位,在數(shù)組中元素所處的位置用自然數(shù)標識。如: >>a='This is an example.'
>>b=a(1:4) % 提出一個子字符串 b = This
ra=a(end:-1:1) % 字符串的倒排 ra =
.elpmaxe na si sihT 又如:
>>A='這是一個算例。';
>>B=size(A) % 符號數(shù)組 A 的“大小” B = 1 7
>>C=A([5 6]) % 提出一個子字符串 C = 算例
3.字符串的ASCII碼
字符串的存儲是用ASCII碼實現(xiàn)的。指令abs和double都可以用來獲取串數(shù)組所對應的ASCII碼數(shù)值數(shù)組。指令char可把ASCII碼數(shù)組變?yōu)榇當?shù)組。如
>>d=double(a) d =
84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112 108 101 46 >>char(d) ans =
This is an example.
例:對字符串ASCII碼數(shù)組的操作:使字符串中字母全部大寫 >>w=find(a>='a'&a<='z'); %找出串數(shù)組a中,小寫字母的元素位置。
>>d(w)=d(w)-32; %大小寫字母ASCII值差32用數(shù)值加法改變部分碼值。 >>char(d) %把新的ASCII碼翻成字符 ans =
THIS IS AN EXAMPLE.
4.字符串數(shù)組的運算(主要是連接)
4.1 連接成一行
>>Aa=[A,a] 可將字符串連接成一行長字符串 Aa =
這是一個算例。This is an example.
>>name = strcat('Thomas',' R.',' Lee') %連接兩個字符串,每個字符串最右邊的空格被裁切 name =
Thomas R. Lee
4.2多個字符串形成多行字符串矩陣 ? 用中括號則要求兩個字符串一般長
>> Aa=[A;a]; %操作錯誤,不能成生成二行的矩陣,長度不一致 ? 用char或strvcat函數(shù)進行連接
>>D=strvcat('Hello','Yes','No','Goodbye') %利用串操作函數(shù)(chat也可以)創(chuàng)建多行串數(shù)組, 連接多行字符串,每行長度可不等,自動把非最長字符串最右邊補空格, 使與最長字符串相等,會忽略空字符串。 D =
Hello Yes No Goodbye
5. 字符串替換和查找
strrep—進行字符串替換,區(qū)分大小寫
>>strrep(str1,str2,str3) %它把str1中所有的str2字串用str3來替換
strfind(str,patten) %查找str中是否有pattern,返回出現(xiàn)位置,沒有出現(xiàn)返回空數(shù)組
findstr(str1,str2) %查找str1和str2中,較短字符串在較長字符串中出現(xiàn)的位置,沒有出現(xiàn)返回空數(shù)組
strmatch(patten,str) %檢查patten是否和str最左側部分一致 strtok(str,char) %返回str中由char指定的字符串前的部分和之后的部分, 6.常用字符串操作函數(shù)
blanks(n)—創(chuàng)建有n個空格組成的字符串 deblank(str)—裁切字符串的尾部空格
strtrim(str)—裁切字符串的開頭和尾部的空格,制表,回車符 lower(str)—將字符串中的字母轉換成小寫 upper(str)—將字符串中的字母轉換成大寫 sort(str)—按照字符的ASCII值對字符串排序 num2str—將數(shù)字轉換為數(shù)字字符串 str2num—將數(shù)字字符串轉換為數(shù)字 mat2str—將數(shù)組轉換成字符串
int2str—把數(shù)值數(shù)組轉換為整數(shù)數(shù)字組成的字符數(shù)組
7.其他字符串操作函數(shù)
strcmp—比較兩個字符串是否完全相等,是,返回真,否則,返回假
strncmp—比較兩個字符串前n個字符是否相等,是,返回真,否則,返回假 strcmpi—比較兩個字符串是否完全相等,忽略字母大小寫
strncmpi—比較兩個字符串前n個字符是否相等,忽略字母大小寫 isletter—檢測字符串中每個字符時否屬于英文字母
isspace—檢測字符串中每個字符是否屬于格式字符(空格,回車,制表,換行符等) isstrprop—檢測字符每一個字符是否屬于指定的范圍.
【例】綜合例題:在MATLAB計算生成的圖形上標出圖名和最大值點坐標。
clear a=2; w=3;
t=0:0.01:10;
y=exp(-a*t).*sin(w*t); [y_max,i_max]=max(y);
t_text=['t=',num2str(t(i_max))]; % <7> y_text=['y=',num2str(y_max)]; % <8> max_text=char('maximum',t_text,y_text); % <9> %
tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)']; plot(t,zeros(size(t)),'k') hold on
plot(t,y,'b')
plot(t(i_max),y_max,'r.','MarkerSize',20) text(t(i_max)+0.3,y_max+0.05,max_text) % <16> title(tit),xlabel('t'),ylabel('y'),hold off
%<11>
y=exp(-2t)*sin(3t)0.60.50.40.3maximum t=0.33 y=0.4321y0.20.10-0.1024t6810圖 3.1-1
二. 單元數(shù)組
單元數(shù)組中的每一個元素稱為單元(cell). 單元可以包含任何類型的matlab數(shù)據(jù), 這些數(shù)據(jù)類型包括數(shù)值數(shù)組, 字符, 符號對象, 甚至其他的單元數(shù)組和結構體. 不同的單元可以包含不同的數(shù)據(jù).
1.1單元數(shù)組創(chuàng)建與顯示:
1、直接賦值法:按單元索引法 和按內(nèi)容索引法。(其實也就是將花括號放在等式的右邊或是左邊的區(qū)別)。注意:“按單元索引法”和“按內(nèi)容索引法”是完全等效的,可以互換使用。通過下面實例,我們看到:花括號{}用于訪問單元的值,而括號()用于標識單元(即:不用于訪問單元的值)。具體理解{}和()區(qū)別可以在下面代碼最后分別輸入A{2,2}和A(2,2)。就會發(fā)現(xiàn)“按內(nèi)容索引法{}”能顯示完整的單元內(nèi)容,而“按單元索引法()”有時無法顯示完整的單元內(nèi)容。
>> A(1,1)={[1 2 3; 4 5 6;7 8 9]}; % 按單元索引法 >> A(1,2)={2+3i};
>> A(2,1)={'A character'}; >> A(2,2)={12:-2:0};
>> A
要想詳細顯示A中的內(nèi)容,可用指令:celldisp(A) A =
[3x3 double] [2.0000 + 3.0000i] 'A character' [1x7 double]
>> B{1,1}=[1 2 3;4 5 6;7 8 9]; % 按內(nèi)容索引法。 >> B{1,2}=2+3i;
>> B{2,1}='A character'; >> B{2,2}=12:-2:0; >>B B =
[3x3 double] [2.0000 + 3.0000i]
總結
以上是生活随笔為你收集整理的matlab单元数组和结构,Matlab使用单元数组和结构数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java集合 Collection
- 下一篇: c语言把数据存放在文件中,急求如何将下列