2012-05-21 70 views
18

Tôi đang cố gắng lặp qua danh sách các chuỗi trong MATLAB. Vấn đề là, bên trong vòng lặp 'for', trình lặp của tôi được coi là 'ô' thay vì một chuỗi.Lặp lại một danh sách các chuỗi trong MATLAB

for str = {'aaa','bbb'} 
    fprintf('%s\n',str); 
end 

??? Error using ==> fprintf 
Function is not defined for 'cell' inputs. 

Cách chính xác \ thanh lịch để khắc phục sự cố này là gì?

+2

Tôi tự hỏi nếu điều này là một lỗi khái niệm trong thiết kế của MATLAB. Tại sao điều này được xây dựng như thế này? – Memming

+0

@Memming Nope. Chỉ cần một người không biết cách sử dụng họ '* printf' các hàm – KitsuneYMG

Trả lời

22

Bạn nên gọi nội dung của tế bào qua str{1} như sau để làm cho nó đúng:

for str = {'aaa','bbb'} 
    fprintf('%s\n',str{1}); 
end 

Dưới đây là một more sophisticated example trên in nội dung của mảng di động.

+2

' char (str) 'cũng hoạt động, và không thất bại nếu vòng lặp được thay đổi sao cho str đi vào như một mảng char chứ không phải là một di động – tmpearce

+1

Điều này thực sự làm phiền tôi mỗi khi tôi làm việc với một mảng ô của chuỗi. Không phải là có một cách thanh lịch hơn để lặp qua mảng ô của chuỗi để trực tiếp nhận được các nội dung của tế bào mà không gọi str {1}? - chỉnh sửa - nevermind, chỉ tìm thấy: http://stackoverflow.com/questions/16587564/can-the-s1-annoyance-when-iterating-over-a-cell-array-be-avoided – rich

6
str={'aaa','bbb'}; 
fprintf('%s\n',str{:}); 

Không cần for vòng lặp.

EDIT: Xem thêm: cellfun

+1

@petrichor Tôi mã MATLAB để kiếm sống tại thời điểm này. Tôi đã được sâu trong các cuộc gọi 'cellfun' và lặp đi lặp lại như thế này. Tôi cũng đã học được một nguyên tắc đúng về MATLAB: không bao giờ sử dụng vòng lặp. Thậm chí là một mớ hỗn độn đáng tin cậy của 'repmat',' permute' và 'reshape' nhanh hơn lặp lại. – KitsuneYMG

Các vấn đề liên quan