2016-09-05 46 views
-3

我试图将正整数的单元格数组打印为空格分隔的字符串。我写了下面的函数,该函数的目的:连接单元格数组的字符串导致不可打印的字符

function string = cell2str(cellArray) 
    cellStrings = cellfun(@(i){[num2str(i) ' ']}, cellArray); 
    string = strtrim(horzcat(cellStrings{:})); 
end 

当我运行报表逐一在Matlab外壳,这个工程,我期望的那样。但只要我自己调用函数,返回值就是一个不可打印的字符串,它只是在shell中显示为一个正方形。这里发生了什么? (建议,以改善功能的欢迎和)

这是个什么样子,当我运行它像(相同的结果,无论我有多少个字符放入输入单元阵列):

>> cell2str({6}) 

ans = 

□ 

旁注;为什么我不能像往常一样将此函数放置在名为'private'的子目录中?当我从MatLab shell中调用函数时,我只得到Undefined function 'cell2str' for input argument of type 'cell'.

+0

我不能重现错误,你的函数似乎工作正常。你还想提供一个打印输出,告诉你如何在终端中调用它(包括你给它的输入)和它给出的输出吗? –

+0

调用此函数似乎适用于我。它按预期的方式返回字符串。你怎么称呼它?把它放在一个私有的subdir中时,你的问题是什么? – bushmills

+1

至于'私人'subdir问题,我假设你正试图从脚本访问它。 “私人”功能只能从其他功能中看到。 (但是我们已经进入了“猜谜游戏”的领域,请重写你的问题以说明问题,不要猜测) –

回答

0

问题是整数被解释为ASCII。下面输入揭示了这一点:

cell2str({65 66 67 68 69}) 

ans = 

A B C D E 

修改后的版本避免了这个问题:

function string = cell2str(cellArray) 
    cellStrings = cellfun(@(i){sprintf('%d ', i)}, cellArray); 
    string = strtrim(horzcat(cellStrings{:})); 
end 

而且具有放置在子目录中的函数的问题称为“私人”是,你只能调用放在函数有从其他功能,而不是从MatLab外壳。

另外;一个更优雅的解决方案与执行时间大致相当,将是这样的:

function string = cell2str(cellArray) 
    strjoin((cellfun(@(i){num2str(i)}, cellArray); 
end