2015-09-19 46 views
1

我有一個單元格滿了字符串。我想重建這個單元格C,只包含字符串長度爲n和更高的字符串的值。我有以下代碼,但它沒有解決:刪除數組元素的字符串長度小於n的單元格(MATLAB)

j=1; 
while(j<length(C)) 
j=j+1; 
y = length(cellstr(C(j))); 
    if(y<req) 
    C(j) = []; 
    end 
end 

req是我想要的新單元格的下限。也就是說,我有一個有很多字符串的單元格。我想要一個新元素,其元素只有長度req或更高。

但是,我仍然在新構建的單元格中獲取比我的閾值更短的值。這段代碼有什麼問題?

+0

從:Y REQ – jdweng

+0

@jdweng爲什麼呢?如果閾值是10,那麼不會刪除10或更高的y的值嗎? –

+0

其實你正在跳過元素。當刪除元素j時,元素j + 1變成元素j。你從查看元素j到元素j + 2 – Geoff

回答

2

由於j在第一次迭代中設置爲2,所以您從不評估第一項。您還需要使用括號訪問C:C{j}

下面的代碼:

C = {'aa', 'bbbbb', 'ccccccc', 'ddddddddd', 'eee'}; 

req = 5; 
j=0; 
while(j<length(C)) 
    j=j+1; 
    y = length(C{j}); 
    if(y<req) 
     C(j) = []; 
    end 
end 

或者你可以使用cellfun像:

req = 5; 
C = C(cellfun(@length,C)>=req); 

在這兩種情況下,輸出將是:

C = 
    'bbbbb' 'ccccccc' 'ddddddddd' 
0

一個解決方案:

C(cellfun(@length,C)< req) = []; 

請參閱cellfun的文檔。

0

與您的代碼的問題是,j=j+1爲開頭,所以錯過了第一個元素,你改變C長度,而你遍歷它,所以你跳過一些元素和cellstr是把一個字符數組單元格數組沒有從單元格數組中獲取字符串。你可以這樣做:

req = 3; 
C = {'a' 'ab' 'abc' 'abcd' 'abcde' 'b'}; 
j=1; 
while(j<=length(C)) 
y = length(C{j}); 
    if(y<req) 
    C(j) = []; 
    else 
    j = j+1; 
    end 
end 

或者乾脆:

req = 3; 
C = {'a' 'ab' 'abc' 'abcd' 'abcde' 'b'}; 
C = C(cellfun(@length,C) >= req) 
相關問題