2016-09-05 47 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