在 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
,您将始终使用strcmp
将data
与其他字符串进行比较。这可能对完成程序的任务没有帮助,因为strcmp
比较的是平等,而不是包含。
如果您不想使用if
、elseif
等,一种选择是循环。将所有可能的字符串保存在一个元胞数组中,我们称它为compareStrings
,然后遍历该数组。
for ii = 1:length(compareStrings)
if strfind(data,compareStringsii)
disp('Yes')
disp (compareStringsii)
end
end
【讨论】:
我个人会先使用cellfun
完成所有strfind
,然后使用switch
语句。如果你相应地改变它,我会+1。否则,让我知道我的方法不对。以上是关于在 Switch 语句/Matlab 中比较字符串的主要内容,如果未能解决你的问题,请参考以下文章