如何在Matlab中声明一个结构和访问数组(写入/读取)各个字段?

时间:2015-04-17 15:13:32

标签: arrays matlab structure

我正在尝试在Matlab中声明一个结构:

book = struct('name', '', 'author','', 'price,'', 'date_of_pub','')

num_books = input('enter number of books')

然后声明一个数组(list_of_books),其中包含有关数字(num_books)书籍的信息。

在C中,我会做这样的事情(示例代码,不详细说明)

typedef struct {
char name[20];
char author[20];
float price;
date date_of_pub; //'date' being another predefined struct containing dd, mm, yy
}book;

int main()
{
int num_books = 0;

printf("enter number of desired books\n");
scanf("%d", &num_books);

book *list_of_books = malloc(num_books * sizeof(book));

for(i = 0; i < num_books; ++i){
    printf("enter name of book #%d:\n",i+1);
    scanf("%s", list_of_books[i].name);
    //same for the other info
}

/ *另一个循环打印书籍上的信息,这可能是一个单独的功能等* /

我知道http://www.mathworks.com/help/matlab/structures.html,但我正在寻找具有类似实现的Matlab代码示例以供学习。或者,如果您有任何其他资源我可以查看,使用代码示例,将非常感激。谢谢。

1 个答案:

答案 0 :(得分:1)

要创建包含list_of_books num_books份副本的数组book,只需使用repmat

list_of_books = repmat(book, num_books, 1);

直接执行此操作(未先定义book):

book = struct('name',repmat({''},num_books,1), 'author','', 'price','', 'date_of_pub','');

后者使用struct的语法多值systax(由我添加的重点):

  

S = struct(field1',VALUES1,'field2',VALUES2,...)

     

使用指定的字段和值创建结构数组。价值       数组VALUES1VALUES2等必须是相同的单元格数组       大小,标量单元格或单个值。相应的元素       值数组被放入相应的结构数组元素。       结果结构的大小与值的大小相同       单元格数组或1-by-1,如果没有值是单元格。

请注意,为一个字段提供多个值(我在这种情况下使用了第一个字段)就足够了,其他字段会自动复制。