2016-09-05 1 views
-3

Ich versuche, ein Zellenarray von positiven ganzen Zahlen zu nehmen und sie als eine durch Leerzeichen getrennte Zeichenfolge zu drucken. Ich habe die folgende Funktion zu diesem Zweck geschrieben:Verketten von Zellen-Array von Zeichenfolgen führt zu nicht druckbaren Zeichen

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

Als ich die Aussagen einer nach dem anderen in der Matlab-Shell ausführen, das funktioniert, wie ich erwarten würde. Aber sobald ich die Funktion selbst anrufe, ist der Rückgabewert eine nicht druckbare Zeichenkette, sie erscheint nur als ein Quadrat in der Shell. Was ist denn hier los?

Dies ist (Vorschläge, um die Funktion willkommen und zu verbessern), wie es aussieht, wenn ich es laufen (die gleiche Ergebnis, egal wie viele Charaktere, die ich in das Eingabezellenfeld) setzen:

>> cell2str({6}) 

ans = 

□ 

Randbemerkung ; Warum kann ich diese Funktion nicht wie üblich in ein Unterverzeichnis namens "privat" stellen? Wenn ich und die Funktion von der MatLab-Shell aufrufen, bekomme ich nur Undefined function 'cell2str' for input argument of type 'cell'.

+0

Ich kann den Fehler nicht reproduzieren, Ihre Funktion scheint gut zu funktionieren. Möchten Sie auch einen Ausdruck darüber geben, wie Sie dies im Terminal nennen (einschließlich welcher Eingabe Sie geben) und die Ausgabe gibt es? –

+0

Aufruf dieser Funktion scheint für mich zu arbeiten. Es gibt die Zeichenfolge wie erwartet zurück. wie nennst du das? Was ist genau dein Problem, wenn du es in ein privates Unterverzeichnis legst? – bushmills

+1

Wie bei der Unterfrage 'private' gehe ich davon aus, dass Sie versuchen, über ein Skript darauf zuzugreifen. "Private" Funktionen sind nur von anderen Funktionen sichtbar. (Aber wir sind schon gut in "Ratespiel" -Territorium. Bitte schreiben Sie Ihre Frage neu, um es klar zu machen und keinen Raum für Vermutungen zu lassen.) –

Antwort

0

Das Problem ist, dass die ganzen Zahlen als ASCII interpretiert werden. Die folgende Eingabe zeigt dies:

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

Und das Problem mit, die die Funktion in einem subdir ‚privaten‘ genannt wurde gelegt, dass Sie nur für getätigte Anrufe können Funktionen:

cell2str({65 66 67 68 69}) 

ans = 

A B C D E 

Eine modifizierte Version dieses Problem vermeidet da von innerhalb anderer Funktionen, nicht von der MatLab-Shell.

Als beiseite; eine etwas elegantere Lösung mit ungefähr äquivalenter Ausführungszeit, wäre dies:

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