2013-02-22 36 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的函数可以做到这一点!