为什么不是strfind写返回值在所有情况下吗?

7视图(30天)
卡尔Witthoft
卡尔Witthoft 2016年1月8日
编辑: Stephen23 2016年1月9日
(如一个非常常见的编程问题。 逻辑表达式失败 )是因为strfind的行为当没有找到匹配返回“[]”。因为随时strfind报告成功,输出是1或更多的正整数,为什么不strfind返回0(相当于逻辑错误)失败?这似乎更加直观(至少对我来说),而且节省了写作的痛苦“如果长度(strfind ())”。

答案(1)

Stephen23
Stephen23 2016年1月8日
编辑:Stephen23 2016年1月9日
你提出减免的基本属性 strfind (和 找到 等):在输出的元素数量等于检测模式的数量。如果用户只需要知道 多少次 这种模式存在:
元素个数(strfind (str,帕特))
你的建议后将不再工作。它将需要 特殊情况 长度 的输出,即需要在所有的代码分别处理。考虑循环在发现指数:
帕特k = strfind (str)
有趣(k);
结束
这个循环迭代多次输出指标。因此,如果 帕特 不匹配,那么循环(正确地)迭代0次。如果输出而不是将零它需要一个不舒服的(特殊情况的处理 如果 内循环,或一些丑陋zero-removal循环变量的定义)。
是你的建议也将应用于一致 找到 ,以及其他的函数,它返回指数。你能想象的混乱吗?
为什么 0 作为一个输出比 [] 吗?唯一的区别是这些学生得到一些 不同的 错误消息(一些关于指数是零),同样困惑。所需的测试(如果没有发现模式):
idx > 0
不是简单的要求:
~ isempty (idx)
通常我写“no-string-found”情况下,使它明显:
idx = strfind (. .);
如果isempty (idx)
其他的
结束
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2016年1月8日
函数是不成功。函数返回一个列表的所有比赛。条目1匹配,2 2匹配的条目,条目0比赛……

登录置评。

类别

找到更多的在变量帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!