matlab字符串操作總結
字符串操作總結
char(S1,S2,…)
利用給定的字符串或單元數組創建字符數組
double(S)
將字符串轉化成ASC碼形式
cellstr(S)
利用的給定的字符數組創建字符串單元數組
blanks(n)
生成一個由n個空格組成的字符串
deblank(S)
刪除尾部的空格
eval_r(S) evalc(S)
使用MATLAB解釋器求字符串表達式的值
ischar(S)
判斷是不是字符串數組
iscellstr(C)
判斷是不是字符串單元數組
isletter(S)
判斷是不是字母
isspace(s)
判斷是不是空格
strcat(S1,S2,…)
將多個字符串水平豎直排列
strvcat(S1,S2,…)
將多個字符串豎直排列
strcmp(S1,S2)
判斷字符串是否相等
strncmp(S1,S2,n)
判斷前n個字符串是否相等
strcmpi(S1,S2)
判斷字符串是否相等(忽略大小寫)
strncmpi(S1,S2,n)
判斷前n個字符串是否相等(忽略大小寫)
strtrim(S1)
刪除結尾的空格
findstr(S1,S2)
查找
strfind(S1,S2)
在S1種查找S2
strjust(S1,type)
按照指定的type調整一個字符串數組
strmatch(S1,S2)
查找要求的字符串的下標
strrep(S1,S2,S3)
將字符串S1中出現的S2用S3代替
strtok(S1,D)
查找S1 中的第一個給定的分隔符之前和之后的字符串
upper(S)
將一個字符串成大寫
lower(S)
將一個字符串轉換為小寫
num2str(k)
將數字轉換成字符串
int2str(k)
將整數型轉換為字符串
mat2str(k)
將矩陣轉換為字符串,供eval使用
str2double(S)
將字符串數組轉化為數值數組
sprintf(S)
創建含有指定格式的字符串
sscanf(S)
按照指定的控制格式讀取字符串
C{3}對內容進行尋址
C(3)對單元索引
(24)利用正在表達式搜索
>> str=’asdfa sfdgdfg tyefgr tyj sdfg qwfge r rety yi .,m zxfgc fdgh fgh’;
>> regexp(str,’fg’)
ans =
12 18 29 34 54 63
我們可以使用字符類來匹配指定的字符,如一個字母,一個數字或一個空格符,也可以用來匹配一個字符集。最有用的一個字符類是一個句號(.),它用來表示任意的單個字符。另外一個有用的字符類是位於方括號中的字符序列或某一部分字符,這一語法用來表示尋找與方括號中任何一個字符元素匹配的字符串子集。例如:
我們要在str中尋找第一個字符為d,最后一個字符為f或g的三個字符組合,可以使用下面的代碼,
>> regexpi(str,’d.[fg]’)
ans =
11 28
>> regexpi(str,’s.[fg]’,'match’) 列出來
ans =
’sdf’ ’sdf’
>> regexp(str,’[a-d]’)
ans =
1 3 5 9 11 28 56 59 列出a-d所有
(25) 關系運算:
xor(x,y) 異或關系
any(X) X中有一個不為零,結果就為一
all(X) X中只要有一個為零即為零。
B=B+(B==0)*eps,這樣可以避免零的出現
>> B=-2:2
B =
-2 -1 0 1 2
>> x=sin(B)./B
Warning: Divide by zero.
x =
0.4546 0.8415 NaN 0.8415 0.4546
>> B=B+(B==0)*eps
B =
-2.0000 -1.0000 0.0000 1.0000 2.0000
>> x=sin(B)./B
x =
0.4546 0.8415 1.0000 0.8415 0.4546
(26)流程控制
switch expression
case test_expression
(commands1)
case test_expression
(commands2)
case test_expression
(commands3)
..
end
try
(commands1)
catch
(command2)
end
在這里,將(commands1)中的命令都執行,如果沒有錯誤,程序控制將直接跳到end。如果喲錯誤,程序控制酒立即跳到catch語句。執行表達式(commands2).
利用lasterr函數可以返回代碼執行遇到的河中錯誤:
>> matlab(:)
??? Undefined function or variable “matlab”.
>> lasterr
ans =
Undefined function or variable “matlab”.
另外利用lasterror可以將更詳細的錯誤信息返回到一個結構體中:
>> errstr=lasterror
errstr =
message: ‘Undefined function or variable “matlab”.’
identifier: ‘MATLAB:UndefinedFunction’
stack: [0×1 struct]
>> errstr.message
ans =
Undefined function or variable “matlab”.
>>(27) 函數
error(‘afgfadgsdf’) 終止程序,並且返回括號中的內容
error和fprintf一樣可以在字符串中格式化顯示的數字變量
warning() 一樣的 只是程序繼續運行。
pcode myfunction 其中myfunction是要編譯的m文件,利用這個命令可以創建偽碼文件,提高運行速度。
(28)創建用戶自己的工具箱
當一個工程鯿好之后,我們可以把它存在toolbox文件夾中,這樣matlab就可以把它這些文件再如到高速緩存區去,提高速度。為了便於文件的管理,和日后的維護,我們最好添加兩個腳本文件:Readme.m和Contents.m這兩個文件不執行任何操作,而全部由一些注釋行組成。
(29)getpref 獲取 setpref 設置, addpref 添加 rmpref 刪除, ispref, uigetpref, uisetpref 工具箱或者函數的優先權
(30)創建命令:
看一下edit命令就知道了。
(31) 函數句柄和匿名函數:
>> il_humps=inline(’1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6′,’x')
il_humps =
Inline function:
il_humps(x) = 1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6
inline函數從一個字符串創建一個函數,並以x為輸入變量。
要驗證一個字符串表示的函數或者內聯函數,可以使用feval函數。
>> z=feval_r(’sin’,pi*(0:4)/4)
z =
0 0.7071 1.0000 0.7071 0.000
>> z=feval_r(il_humps,[-1 0 1])
z =
-5.1378 5.1765 16.0000
下面創建一個匿名函數:
>> af_humps=@(x)1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6
af_humps =
@(x) 1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6
>> af_humps(-1:1)
ans =
-5.1378 5.1765 16.0000
>> a=1;b=2;
>> asda=@(x) sin(a*x).*cos(b*x);
>> asda(-1:1)
ans =
0.3502 0 -0.3502
>> fhan={@sin @cos}
fhan =
@sin @cos
>> fhan{1}(1:2)
ans =
0.8415 0.9093
str2func()
func2str()
(32) 嵌套函數
如果一個函數包含嵌套函數,則無論是嵌套函數還是住函數,都必須以end結尾:
嵌套函數與子函數的區別:
嵌套出現在主函數聲明之后的任意位置,而子函數只能出現在主函數之后。
嵌套可以訪問主函數工作區中的任何變量值,而子函數只能通過參數訪問主函數工作區的某些變量。
主函數可以訪問嵌套函數工作區中的所有變量,而只能夠通過子函數的輸出訪問子函數工作區的某些變量
(33)m文件的調試和剖析
keyboard
mlint
depfun
利用profile可以剖析程序的效率
一種辦法:直接打開profile,另外一種辦法利用如此下代碼:
>> profile on
>> for i=1:100
test(1:100);
end
profile viewer
(34)Matlab數據文件
save and load
save var1 var2 var3
save filename var1 var2
save(‘filename’,’var1’,’var2’,…)
load功能和save相反
vnew=load(‘filename’,’var1’,’var2’) 將變量存在vnew結構體中。
fprintf
>> a=[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>>fid = fopen('exp.txt','w');
fprintf(fid,'%2.0f\n',a);
fclose(fid);
>> type exp.txt
1
4
7
2
5
8
3
6
9
fprintf輸出是一列一列的從左到右輸出。
>> dlmwrite('eg2.dat',a,'\n');
>> type eg2.dat
1
2
3
4
5
6
7
8
9
fprintf輸出是一行一行的從上到下輸出。
文件的讀和寫
clc
clear all
fid1 = fopen('F:\example\1.txt','r');
a=fgetl(fid1);
fclose(fid1);
fid2 = fopen('F:\example\2.txt','a');
fprintf(fid2,'%s\n',a);
fclose(fid2);
type F:\example\2.txt%顯示文本的內容
fprintf(fid,'%s\r\n',x); %的情況下就可以把數據輸出的文件並且換行