0

我想编写一个比较两个字符串的元素的 Matlab 函数,以便给定一个字符串的单个单元格数组,它将返回该单个单元格数组,但按字母顺序排列,例如function({'car','apple','bus'}),我编写了一个子函数来比较两个字符串相互对应并分配一个数值:

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 中运行我的程序时,它说行中有错误

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

我不知道为什么会这样?

4

3 回答 3

2

sortuniqueismember等函数不仅为数字定义,还为字符串元胞数组定义。因此,我认为没有必要将您的字符串转换为数字。

至于您的错误-您需要提供字符串,而不是单元格数组,即

myCellArray = {'car','apple'}

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

使用大括号,您可以访问元胞数组元素的内容,而使用括号,您将提供单元格,并且<没有为单元格定义。

于 2013-02-22T11:56:10.817 回答
1

我已经在 GNU/Linux 下的 Matlab R2010a 中运行了您的代码,它可以正常工作。我已将您的功能保存在一个名为 的文件comparestring.m中,然后我可以通过以下方式调用它:

comparestrings('car','apple')

ans =

     0

comparestrings('apple', 'car')

ans =

     1

也许你没有正确调用你的函数?

无论如何,如果您不需要自己创建函数,您可以使用 Matlab 的内置函数sort

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

ans = 

    'apple'    'bus'    'car'
于 2013-02-22T11:55:09.557 回答
0

顺便说一句,matlab 中有一个叫做 strcmp 的函数可以做到这一点!

于 2013-02-23T09:47:04.983 回答