【问题标题】:Matlab function to compare the elements of two stringsMatlab函数比较两个字符串的元素
【发布时间】:2013-02-08 00:09:37
【问题描述】:

我想编写一个比较两个字符串元素的 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)

我不知道为什么会这样?

【问题讨论】:

  • 错误是什么?你的字符串是如何定义的?如果它是 kx1 的向量,则可能存在大小不匹配。
  • 这纯粹是一个编程问题。它可能更适合 StackOverflow。如果您愿意,我们可以为您迁移问题。
  • @WillieWong 哦,对,对不起,我没有意识到。那太好了,谢谢。

标签: matlab


【解决方案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'

【讨论】:

    【解决方案2】:

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

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

    myCellArray = {'car','apple'}
    
    compareStrings(myCellArray{1},myCellArray{2})
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        相关资源
        最近更新 更多