2015-04-22 81 views
0

我有一個問題。問題如下: 如何比較Matlab中的字符串?比較開關語句中的字符串/ Matlab

我有一個變量,它被稱爲數據。這個變量表示我想要比較的當前字符串,如果它有一個子字符串。

我有很多不同的可能性,這就是爲什麼我想使用Switch-Statement的原因。

在代碼示例中,您可以看到具有變量「數據」的開關。如果變量包含子串「開始」,則應執行以下情況。否則,應使用「其他」聲明。

我希望你能明白我想要做什麼。感謝您的幫助和支持。

function testObj = workflow(testObj, data) 



      switch data 
       case strfind(data, 'Start')>5 
        disp('Yes') 

       case strfind(data, 'End')>10 
        disp('Yes') 

       case strfind(data, 'NewTest')>15 
        disp('Yes') 

       otherwise 
        disp('No') 
      end 


     end 

文檔:

開關組條件執行一組從幾種選擇語句。每個選擇都是一個案例。

評估的switch_expression是標量或字符串。經過評估的 case_expression是標量,字符串或標量或 字符串的單元數組。開關塊測試每個案例,直到其中一個案例爲 爲真。出現以下情況時爲:

對於數字,eq(case_expression,switch_expression)。

對於字符串,strcmp(case_expression,switch_expression)。

對於支持eq功能的對象, eq(case_expression,switch_expression)。

對於單元陣列case_expression,至少有一個 單元格數組的元素匹配switch_expression,如上面爲數字, 字符串和對象所定義的那樣。

當案例爲真時,MATLAB執行相應的語句,然後 退出交換機模塊。

否則是可選的,只有在沒有大小寫的情況下才會執行。

+0

你甚至讀過文檔嗎? – David

+0

@David是的,我閱讀了文檔,但沒有關於它的信息。 –

+0

爲什麼沒有'if','elseif',...? –

回答

0

開關的工作方式不同,因爲你寫的,你可以選擇在case聲明,從數據可能完整的價值觀,你可能想

switch strfind(data, 'Start') > 5 
    case true 
     disp('Yes') 
    otherwise 
     disp('No') 
end 

或使用if爲此,短。

+0

謝謝你的回答,但我尋找另一個解決方案,因爲在未來會有很多不同的情況......我在問題中添加了一些新代碼以便稍微解釋一下 –

0

你解釋過,你有很多可能性爲你想在data中搜索的內容字符串。如果您使用的是switch data,則將始終使用strcmpdata與某些其他字符串進行比較。這可能不會有助於全面完成程序的任務,因爲strcmp比較等於,不適用於包含。

如果你不想使用if,elseif等,一個選項將是一個循環。將所有可能的字符串保存在一個單元格數組中,我們稱之爲compareStrings,並遍歷數組。

for ii = 1:length(compareStrings) 
    if strfind(data,compareStrings{ii}) 
    disp('Yes') 
    disp (compareStrings{ii}) 
    end 
end 
+0

個人而言,我會首先使用'cellfun'完成所有'strfind',然後使用'switch'語句。如果你相應地改變它,我會給它+1。否則,讓我知道我的方法是不正確的。 – krisdestruction