我正在尝试获取正整数的单元格数组,并将它们打印为空格分隔的字符串。我为此目的编写了以下函数:
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'.
答案 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