n = 44时,大小的奇怪行为(strfind(n,','))

时间:2015-10-08 16:23:58

标签: matlab

出于某种原因

size(strfind(n,','))

数字44是特殊的,并产生逗号找到的结果:

value={55}
numCommas = size(strfind(value{1},','),2) 
ans= 0 ...(GOOD)

value={44}
numCommas = size(strfind(value{1},','),2)
ans= 1 ...(BAD) - Why is it doing this?

value={'44,44,44'}
numCommas = size(strfind(value{1},','),2)
ans= 2 ...(GREAT) 

我需要在单元格元素中找到逗号的数量,其中元素可以是整数或字符串。

3 个答案:

答案 0 :(得分:3)

您只需执行value{1} = '44'即可避免此问题。或者,如果这不是替代方案,请使用num2str,如下所示:

value={44};
numCommas = size(strfind(num2str(value{1}),','),2)    
numCommas =
     0

这也适用于字符串输入:

value={'44,44,44'};
numCommas = size(strfind(num2str(value{1}),','),2)
numCommas =
     2

为什么你得到"错误"结果吗?`

这是因为44是逗号,的{​​{3}}。 您可以通过将值转换为ASCII code来非常简单地检查这一点。

char(44)
ans =
,

您正在检查字符串中的逗号。由于strfind的输入是一个整数,它会自动将其转换为char。在最后一个示例中,您正在插入一个真实的"字符串,因此它在那里找到两个逗号。

答案 1 :(得分:3)

详细说明我的评论。逗号的ASCII code,)为44.实际上,您在代码中执行的操作是

size(strfind(44,','),2)

size(strfind(char(44),','),2)

其中44不是字符串,但被解释为数值,然后转换为字符并生成逗号(,),我们在使用时可以看到char {{3} }}

>> char(44)
ans =

,

您可以通过更改

来修复代码
value={44}

value={'44'}

因此,您将对字符串而不是数字值执行strfind

>> size(strfind('44', ','), 2)
ans =

     0

提供了正确的答案。

或者您可以使用num2str

>> size(strfind(num2str(value{1}), ','), 2)
ans =

     0

答案 2 :(得分:0)

试试这个:

value={'44'}
numCommas = size(strfind(value{1},','),2)

而不是:

value={44}
numCommas = size(strfind(value{1},','),2)

它应该有用,因为它现在是一个字母。