Maheen Siddiqui
Maheen Siddiqui

Reputation: 539

How to use sprintf/fprintf to print a string inside a cell array in matlab?

I was wondering if it was possible to use sprintf or fprintf to print something to a cell array.

In a structure A I have

A.labels = {'A' 'B' 'C' 'D'}

and I have a string/cell array

B = {'E' 'F' 'G' 'H'}

and I want to print into a new structure C such that I want

C.labels = {'A-E', 'B-F', 'C-G', 'E-H'}

In the code below I am just trying to check how to do the first entry and then once I figure that out I can do the rest myself.

C(1).labels = fprintf('%s -%s',B{1},A(1).labels);

But this does not do the job. How can I fix this?

Upvotes: 1

Views: 6013

Answers (2)

Luis Mendo
Luis Mendo

Reputation: 112659

This can be done very simply with strcat:

C.labels = strcat(A.labels, '-', B);

Upvotes: 2

knedlsepp
knedlsepp

Reputation: 6084

If you type help fprintf it says:

fprintf - Write data to text file

But you want help sprintf:

sprintf - Format data into string

So you can fix your problem using:

C.labels = cellfun(@(x,y) sprintf('%s-%s',x,y), A.labels, B, 'uni',0)

This uses: cellfun to take corresponding pairs of A.labels and B and feeds it to the function @(x,y) sprintf('%s-%s',x,y), which uses sprintf.

You could also use a regular for loop of course. I want to add also that what you currently have is a structure with a single cell-entry of length four instead of four structures each having a single entry.

Upvotes: 2

Related Questions