2013-02-22 61 views
0

我想編寫一個Matlab函數來比較兩個字符串的元素,這樣給定一個單個字符串的單元格數組,它將按字母順序返回單個單元格數組,例如function({'car','apple','bus'})所以我寫了一個子功能比較對彼此兩個字符串的元素,並分配一個數值:Matlab函數比較兩個字符串的元素

function [ out ] = comparestrings(a,b) 

for k=1:min(length(a),length(b)) 

    if a(1,k)<b(1,k) 
     out=1; 
     return 
    elseif b(1,k)<a(1,k) 
     out=0; 
     return 
    end  
end 
    if length(a)<length(b)   
     out=1; 
    else out=0;  
    end 
end 

但是當我嘗試運行我的Matlab程序,它說有錯誤的line

if a(1,k) < b(1,k) 

我沒有c爲什麼這可能是?

+0

錯誤是什麼?你的字符串是如何定義的?如果它是kx1的向量,那麼可能會有尺寸不匹配。 – 2013-02-22 11:09:15

+0

這純粹是一個編程問題。它可能更適合StackOverflow。如果你想我們可以爲你解決問題。 – 2013-02-22 11:16:33

+0

@WillieWong哦,對不起,我沒有意識到。那太棒了,謝謝。 – 2013-02-22 11:24:33

回答

1

我已經在GNU/Linux下的Matlab R2010a中運行你的代碼,它工作正常。我已經保存在一個名爲comparestring.m文件的funcion,然後我可以調用它的方式如下:

comparestrings('car','apple') 

ans = 

    0 

comparestrings('apple', 'car') 

ans = 

    1 

也許你沒有正確調用你的函數?

無論如何,如果你不需要自己創建一個功能,您可以用Matlab的內置功能sort

sort({'car','apple','bus'}) 

ans = 

    'apple' 'bus' 'car' 
2

功能類似於sortunique,並且ismember的定義不僅是數字,也爲單元格的字符串數組。因此,我不認爲有必要將字符串轉換爲數字。

至於你的錯誤 - 你需要提供一個字符串,而不是電池陣列,即

myCellArray = {'car','apple'} 

compareStrings(myCellArray{1},myCellArray{2}) 

隨着大括號,你訪問單元陣列中的元素的含量,同時用括號,你」 d是提供細胞,並且細胞沒有定義<

0

順便說一下,在matlab中有一個名爲strcmp的函數可以做到這一點!