连接字符串的单元格数组导致不可打印的字符

时间:2016-09-05 09:12:08

标签: matlab

我正在尝试获取正整数的单元格数组,并将它们打印为空格分隔的字符串。我为此目的编写了以下函数:

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

当我在MatLab shell中逐个运行语句时,这可以像我期望的那样工作。但是只要我调用函数本身,返回值就是一个不可打印的字符串,它只是在shell中显示为正方形。这里发生了什么? (建议改善功能欢迎)

这就是我运行它时的样子(无论输入单元格数组中有多少个字符,结果都相同):

>> cell2str({6})

ans =

□

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

1 个答案:

答案 0 :(得分: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 shell调用。

撇开;一个更优雅的解决方案,具有大致相同的执行时间,将是这样的:

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