2010年12月1日星期三

字符串转数组

简单的说,就是一个这样的数组,在matlab里面怎么转成数组


a='1,2,3,424,232'

看起来挺简单一个事情,就连vba这种东西都有函数能简单的处理这个

结果我只想到了以下两个异常拙劣的方法.....

方案1:
eval(['c=[',a,']'])

方案2:

>> b=regexp(a, '(\d+)', 'tokens')

b =

    {1x1 cell}    {1x1 cell}    {1x1 cell}    {1x1 cell}    {1x1 cell}

>> str2double([b{:}])

ans =

     1     2     3   424   232


方案1实在过于不正规了,而且很担心eval这类东西的效率。

至于方案2,因为regexp得到的是一个cell类型,使得后续的处理变得很麻烦。为了把它转成数组,用了[b{:}]这样的方法,同样可能会很影响效率。另外str2double这个函数,也是从matlab的若干str2xxx函数里面好不容易选出来的------str2num就不支持cell输入,总的来说cell这个类型虽然解决了很多问题,提高了语言的灵活性,但是可能是出于效率的问题,matlab的基本函数对它的支持还是相对有限的。

结果去版上问了一下,大佬同志马上提供了下面这种方法,确实很不错

sscanf(strrep(a,',',' '),'%f')

sscanf这个函数是个非常好用的东西,因为他能直接以字符串作为输入,所以很适合做简单的parse-----跟regexp的有点在这里也表现得很突出:它可以直接返回数组。