在 Switch 语句/Matlab 中比较字符串

Posted

技术标签:

【中文标题】在 Switch 语句/Matlab 中比较字符串【英文标题】:Compare Strings in a Switch Statement / Matlab 【发布时间】:2015-04-22 08:01:20 【问题描述】:

我有一个问题。问题如下: 如何在 Matlab 中比较字符串?

我有一个变量,它叫做数据。该变量表示当前字符串,如果其中有子字符串,我要比较它。

我有很多不同的可能性,这就是我想使用 Switch-Statement 的原因。

在代码示例中,您可以看到带有变量“数据”的开关。如果变量包含子字符串“开始”,则应执行以下情况。否则应使用“否则”语句。

我希望你能明白我想做什么。感谢您的帮助和支持。

    function testObj = workflow(testObj, data)



            switch data
                case strfind(data, 'Start')>5
                    disp('Yes')

                case strfind(data, 'End')>10
                    disp('Yes')

                case strfind(data, 'NewTest')>15
                    disp('Yes')

                otherwise
                    disp('No')
            end


        end

文档:

一个 switch 块有条件地从多个选项中执行一组语句。每个选择都是一个案例。

求值的 switch_expression 是一个标量或字符串。一个评估 case_expression 是标量、字符串或标量元胞数组,或 字符串。 switch 块测试每个案例,直到其中一个案例是 真的。在以下情况下为真:

对于数字,eq(case_expression,switch_expression)。

对于字符串,strcmp(case_expression,switch_expression)。

对于支持 eq 函数的对象, eq(case_expression,switch_expression).

对于元胞数组 case_expression,至少有一个元素 元胞数组匹配 switch_expression,如上面为数字定义的, 字符串和对象。

当 case 为真时,MATLAB 执行相应的语句,并且 然后退出切换块。

otherwise 是可选的,仅在没有 case 为真时执行。

【问题讨论】:

你读过文档吗? @David 是的,我阅读了文档,但没有关于它的信息。 为什么没有if, elseif, ...? @m.s.可以用 if,elseif... 解决问题,但我有这个问题,我认为结构会比 if elseif 好得多 【参考方案1】:

switch 的工作方式不同,正如您编写的那样,您可以在case 语句中从可能的完整数据值中选择您可能想要的

switch strfind( data, 'Start') > 5
    case true
        disp( 'Yes')
    otherwise
        disp( 'No')
end

或为此使用if,更短。

【讨论】:

感谢您的回答,但我搜索了另一个解决方案,因为将来会有很多不同的情况......我在问题中添加了一些新代码来解释它一点点 【参考方案2】:

您解释说,对于要在data 中搜索的内容字符串,您有多种可能性。如果您使用switch data,您将始终使用strcmpdata 与其他字符串进行比较。这可能对完成程序的任务没有帮助,因为strcmp 比较的是平等,而不是包含。

如果您不想使用ifelseif 等,一种选择是循环。将所有可能的字符串保存在一个元胞数组中,我们称它为compareStrings,然后遍历该数组。

for ii = 1:length(compareStrings)
  if strfind(data,compareStringsii)
    disp('Yes')
    disp (compareStringsii)
  end
end

【讨论】:

我个人会先使用cellfun 完成所有strfind,然后使用switch 语句。如果你相应地改变它,我会+1。否则,让我知道我的方法不对。

以上是关于在 Switch 语句/Matlab 中比较字符串的主要内容,如果未能解决你的问题,请参考以下文章

switch语句怎么用啊 具体啊!

java7中switch比较字符串

使用switch语句将字符串与枚举进行比较

matlab中出现case语句错误

Matlab编程语言,五条件语句

switch语句