matlab中字符串匹配函數(shù)

MATLAB字符串匹配函數(shù)中,應(yīng)用較多的有:findstr、strfind、strmatch、strcmp、strmcmp。這里我們大致列舉這些函數(shù)的區(qū)別與聯(lián)系

在Matlab中,這幾個函數(shù)區(qū)分如下:
(以下默認S1和S2是字符串,同樣也適用于cell細胞類型數(shù)據(jù),也就是循環(huán)對cell中每個元素分別判斷即可。)
findstr(S1,S2):尋找是否有S1和S2之間的匹配,真返回1,假返回0,雙向;
例:
s = 'How much wood would a woodchuck chuck?';

findstr(s,'a') returns 21

findstr('a',s) returns 21

findstr(s,'wood') returns [10 23]

findstr(s,'Wood') returns []

findstr(s,' ') returns [4 9 14 20 22 32]

strfind(S1,S2):尋找S2是否匹配S1,和上面的唯一區(qū)別就是這個是單向的。請注意唯一的區(qū)別在例子中紅字部分。
例:
s = 'How much wood would a woodchuck chuck?';

strfind(s,'a') returns 21

strfind('a',s) returns []

strfind(s,'wood') returns [10 23]

strfind(s,'Wood') returns []

strfind(s,' ') returns [4 9 14 20 22 32]

strcmp(S1,S2):尋找S1和S2是否完全匹配,S1和S2沒有順序的區(qū)分。
例:
s= 'wooden';

strcmp(s,'wood') returns 0

strcmp(s,'wooden') returns 1

strcmp('wooden',s) returns 1

strcnmp(S1,S2,n):尋找S1和S2的前n個字符
是否完全匹配,S1和S2沒有順序的區(qū)分。
例:
s= 'wooden';

strncmp(s,'wood',4) returns 1

strncmp(s,'wood',5) returns 0

strncmp(s,'wooden',4) returns 1

strncmp('wooden',s,4) returns 1

strcmpi(S1,S2)與strncmpi(S1,S2,n)與上面分別對應(yīng)的strcmp(S1,S2)與strncmp(S1,S2,n)完全相同,唯一的區(qū)分是匹配時不區(qū)分大小寫。

最重要的:

strmatch(S1,S2):尋找S1是否匹配S2的開頭部分,返回值是S1在S2中匹配的位置。

strmatch(S1,S2,'exact'):
尋找S1是否和S2完全匹配,返回值是S1在S2中匹配的位置。
例:
S2=strvcat('max','minimax','maximum')

S2 =

max

minimax

maximum

strmatch('max',S2) returns [1; 3] 表明1和3列匹配

strmatch('max',S2,'exact') returns [1] 表明1列完全匹配

strmatch的一個好處是可以返回匹配的位置,而其余幾個函數(shù)都只能返回判斷值。


但是,strmatch在2011b之后的版本將被刪除不再使用。根據(jù)個人推測的原因和網(wǎng)上求證如下:
1、strmatch的功能完全可以由以上的幾個函數(shù)實現(xiàn)。
2、strmatch是一個M文件,而其余幾個函數(shù)都是內(nèi)置的函數(shù),因此在執(zhí)行時,可以預(yù)測到strcmp的效率是遠遠高于strmatch的。
3、另一個因素,strmatch要先創(chuàng)建一個矩陣來儲存返回的真值的位置,且在循環(huán)的過程中這個矩陣在不斷變化;而strcmp僅僅返回真假。因此推測效率更高。
以上僅為推測,我沒有做過測試。因此對于小程序來說,這點時間效率的對比實在不會太重要。總之,還是選擇自己適合的函數(shù)就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 86.復(fù)合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,559評論 1 5
  • 本文轉(zhuǎn)自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI閱讀 9,688評論 0 0
  • 一、字符串操作 strcpy(p, p1) 復(fù)制字符串 strncpy(p, p1, n) 復(fù)制指定長度字符串 s...
    JaiUnChat閱讀 1,752評論 0 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 嗨!對面的女孩看過了,看過來,看過了,這邊有一個大帥哥。(撲街)是大哀哥好不!――劇情有點復(fù)雜。 其實是我上課時...
    碎月溺花閱讀 285評論 0 2

友情鏈接更多精彩內(nèi)容