3

我需要创建一个 matlab 结构,ds=struct('name',{{'my_name_is'},{'matlab_thining_hair'}})它存储为一个 1x2 结构数组,其中包含字段:名称。调用 ds.name 生成输出:

ds.name

ans = '我的名字'

ans = 'matlab_thinging_hair'

请注意输出中的单引号。它们很重要。也就是说,我需要使用以下变量创建上述结构: X = [1x46 char] [1x47 char] 即 1x2 单元格,我认为这实际上是一个字符串单元格数组。除其他外,我尝试了以下方法:

Y = cell2struct(X, 'name', 1)'

这会产生一个具有字段名称的 1x2 结构数组,但是对 Y 的调用会生成输出:

Y.name

ans = my_name_is

ans = matlab_thinging_hair

请注意,输出中缺少单引号,尽管 Y 和 ds 都是具有字段名称的 1x2 结构数组,但字段值的格式不同,并且结构的字节大小也不同。如何将字段值格式化为字符数组?

4

2 回答 2

1

在调用 cell2struct 之前,将您的 char 字符串粘贴到另一层单元格中。代替:

X = { 'foo', 'bar' }

尝试:

X = { {'foo'}, {'bar'} }

也就是说,一个 1×2 单元格,其单元格内容本身就是单元格,而不是字符。然后cell2struct(X, 'name', 1)应该给你一个带有单元格数组字段的结构数组。

如果您现有的 X 是一个 cellstr,我认为您可以调用num2cell它来将每个单元格向下推入另一层单元格间接层。

于 2013-01-11T16:58:09.297 回答
1

在第一种情况下,您创建了一个结构,其中包含两个字段,其值为元胞数组。元胞数组以引号显示。

在第二种情况下,您的结构字段具有您想要的 char 数组。字符数组不带引号显示。

您可以通过输入命令提示符 {'abc'} 然后输入 'abc' 来验证这一点。

在第一种情况下,您可以通过在单元格括号外传递字符串来创建非单元格数组字段值。

ds=struct('name',{'my_name_is','matlab_thinging_hair'})

于 2013-01-10T02:34:27.437 回答