2010-06-04 28 views
8

Làm thế nào bạn có thể xây dựng một chuỗi ô chứa các số hiệu quả (trong trường hợp cụ thể của tôi, một mảng ô của nhãn cho chú giải).Làm thế nào để xây dựng một dãy ô chứa các số

Ví dụ: {'series 1', 'series 2', 'series 3'}

Tôi đã thử mọi thứ dọc theo dòng của

sprintf('series %i', {1:10}) 

nhưng dường như mảng sprintf và tế bào không chơi đẹp với nhau.

Một cái gì đó như thế này hoạt động nếu tôi chỉ muốn số, nhưng không hoạt động nếu tôi muốn văn bản là tốt.

cellstr(int2str([1:10]')) 

Rõ ràng, nó có thể được thực hiện trong một vòng lặp, nhưng phải có cách thông minh để làm điều này.

Trả lời

6

Các chức năng INT2STRSTRCAT làm các trick:

>> cellArray = strcat({'series '},int2str((1:3).')).' 

cellArray = 

    'series 1' 'series 2' 'series 3' 
3

Một cách hơi khác nhau:

cellArray = cellstr(num2str((1:3)', 'series %d')) 

hoặc cách khác

cellArray = strcat(num2str((1:3)', 'series %d'), {}) 

với kết quả:

cellArray = 
    'series 1' 
    'series 2' 
    'series 3' 
3

Bạn có thể sử dụng một lớp lót bên dưới cho đầu ra phức tạp hơn:

cellarray = arrayfun(@(x) {sprintf('item %d of 3', x)}, 1:3) 

cellarray = 

    'item 1 of 3' 'item 2 of 3' 'item 3 of 3' 
+0

Có! Điều này! Bạn giải quyết vấn đề của tôi, các giải pháp khác không làm việc cho kết quả đầu ra liên quan nhiều hơn. Ban đầu tôi tạo một vòng lặp không hoạt động khi được sử dụng làm đầu vào cho chú giải(): cho ii = 1: n; cellArray {ii} = {sptrinf ('n% d, val% 0,2f', ii, vals (ii))}; kết thúc – Leo

12

Tôi biết nó được 4 năm nhưng tôi đi qua các chức năng không có giấy tờ sprintfc được sử dụng để thực hiện chính xác những gì bạn muốn:

CellArray = sprintfc('series %i',1:3); 

CellArray = 

    'series 1' 'series 2' 'series 3' 

cũng ... nó có thể hữu ích cho người tôi đoán.

+2

Rất hữu ích - cảm ơn bạn. – Flyto

+0

tuyệt vời! Vui mừng một người nào đó đã phát hiện ra bài đăng này :) –

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