String 比较Switch语句/Matlab中的字符串

String 比较Switch语句/Matlab中的字符串,string,matlab,switch-statement,compare,String,Matlab,Switch Statement,Compare,我有个问题。问题如下: 如何在Matlab中比较字符串 我有一个变量,叫做数据。此变量表示当前字符串,如果其中有子字符串,则要对其进行比较 我有很多不同的可能性,这就是我想使用Switch语句的原因 在代码示例中,您可以看到带有变量“data”的开关。如果变量包含子字符串“Start”,则应执行以下情况。否则,应使用“否则”语句 我希望你能理解我想做什么。谢谢你的帮助和支持 function testObj = workflow(testObj, data)

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

我有一个变量,叫做数据。此变量表示当前字符串,如果其中有子字符串,则要对其进行比较

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

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

我希望你能理解我想做什么。谢谢你的帮助和支持

    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_表达式是标量或字符串。评价 case_表达式是标量、字符串或标量的单元格数组或 串。开关块测试每种情况,直到其中一种情况消失 对。在下列情况下,情况为真:

对于数字,eq(大小写表达式、开关表达式)

对于字符串,strcmp(case\u表达式、switch\u表达式)

对于支持eq功能的对象, eq(大小写表达式、开关表达式)

对于单元格数组case_表达式 单元格数组与开关_表达式匹配,如上面为数字定义的, 字符串和对象

当一个案例为真时,MATLAB执行相应的语句,并且 然后退出开关块

否则是可选的,并且仅在没有case为true时执行


switch的工作原理不同,正如您编写的一样,您可以在
case
语句中从可能的完整数据值中进行选择

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

或者使用
如果
,则更短。

您解释过,对于要在
数据
中搜索的内容字符串,您有多种可能性。如果使用
开关数据
,您将始终使用
strcmp
数据
与其他字符串进行比较。这可能不会有助于完成程序的任务,因为strcmp比较的是相等,而不是包含

如果您不想使用
If
elseif
等,一个选项是循环。将所有可能的字符串保存在一个单元格数组中,我们将其称为
compareStrings
,然后遍历该数组

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

你读过文档了吗?@David是的,我读过文档,但是里面没有关于它的信息。为什么不
if
elseif
,…?@m.s.如果,elseif可以解决这个问题。。。但我有一个问题,我认为结构会比if Elseifts好得多谢谢你的回答,但我寻找另一个解决方案,因为未来会有很多不同的情况。。。我在问题中添加了一些新代码,以更个人化地解释它。我会首先使用
cellfun
执行所有
strfind
,然后使用
switch
语句。如果你相应地改变它,我将+1它。否则,让我知道我的方法不对。