用Matlab创建一个字符串的单元数组

7

您好,我正在尝试使用以下方法创建一个字符串的单元数组:

data = ['1';'2';'3';'4';'5';'6';'7';'8';'9';'10';'11';'12';'13';'14';'15';'16';'17';'18';'19';'20';];

我原本期望得到一个包含25个元素的单元数组,但实际获得的是:

length(data)

= 33

显然,数字12、13等都被视为2位。

我的问题是如何确保单元数组的长度为20?而且,即使我使用整数,我要将单元数组放入的函数也必须是字符串的单元数组!


在Matlab中,字符串是字符数组。像这样连接字符串会得到一个长字符串。此外:length、size等报告的大小是元素数量而不是字节数。 - jpjacobs
可能是重复的问题:创建字符串数组 - Eitan T
2个回答

16

你需要做:

data = {'1';'2';'3';'4';'5';'6';'7';'8';'9';'10';'11';'12';'13';'14';'15';'16';'17';'18';'19';'20';};

使用{}。这将形成一个单元数组。


先生,您拯救了我免于永恒的痛苦。谢谢您。 - Benyamin Noori

11

你可以使用{}代替[]来构建单元格,或者你可以使用strsplit来构建一个任意长度的字符串单元格,表示从1到N的数字:

data = strsplit(num2str(1:N));

更新: 现在最快的方法是使用未记录在案的sprintfc函数(注意末尾的"c" ),它会将每个元素打印到自己的单元格中:

>> A = sprintfc('%g',1:20)
A = 
  Columns 1 through 11
    '1'    '2'    '3'    '4'    '5'    '6'    '7'    '8'    '9'    '10'    '11'
  Columns 12 through 20
    '12'    '13'    '14'    '15'    '16'    '17'    '18'    '19'    '20'
>> which sprintfc
built-in (undocumented)

1
@GuntherStruyf:接近了!但是这不会返回字符串。我想你的意思是 data=arrayfun(@num2str,1:N,'uni',false)。;) - chappjc
cellfun(@num2str,num2cell(1:N),'uni',false)。有这么多的可能性! - chappjc
@chapjc 确实,我忘记了 num2str,我经常用它来快速将数字放在图例中。但对于您的第二个选项:那就太麻烦了,因为 arrayfun 只需要一个普通数组,所以不需要 num2cell。现在我再看一下,strsplit 可能更好(简短明了)。 - Gunther Struyf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接