使用文本文件创建结构数组

时间:2016-10-15 10:31:59

标签: c arrays file struct malloc

给定一个半已知格式的文本文件。 1行中的总字符数将小于1000.Zinteger只是一个普通的整数,但它有不同的用途。字符串通过空格终止。

String ZInteger Integer Integer

String ZInteger Integer Integer Integer Integer

所以它的一个单词后跟一个数字,后跟数字对,但是随机数量的对。

我想为数据结构中的每一行存储字符串,Zinteger和整数对。

所以我尝试了一个数组,其中A [1]将是一个具有String,Zinteger和整数对的结构,这将是具有整数对的另一个结构。这是我试过的。

typedef struct {
int num1;
int num2;
} ints_t;

typedef struct {
char term[1000];
int quantity(bad variable name, could be called alpha);
ints_t *pairs;
} info_t;

非常感谢帮助。

编辑:好吧,我太开放了。如此生病只是问一个简单的问题是我生存的两个结构,如果不是我如何使它们可行,我如何malloc结构和数组。

1 个答案:

答案 0 :(得分:1)

您的结构看起来很合理,但它缺少一个字段来存储对数的计数:

typedef struct {
    int num1;
    int num2;
} int_pair_t;

typedef struct {
    char term[1000];
    int zinteger;    /* so named to avoid confusion */
    int n_pairs;
    int_pair_t *pairs;
} info_t;

假设每行最多1000个字符,并假设一个字符串后跟一个空格,后跟一个数字Zinteger,则332是最大数量的对(单个数字后跟空格后跟一个可以容纳在其余字符中的单个数字。

因此,您可以使用固定大小的int_pair_t pairs[332]数组,其中读取一行中的对,以及term的字符串和int的{ {1}}和对数。一旦你读完了这一行,就可以将对数据复制到一个恰当大小的新malloced Zinteger结构中,并将其添加到你对这些行所拥有的任何集合中。

如果你不太关心内存使用情况(每行少于3KB),你可以跳过malloc并复制,只需在info_t中分配一个固定大小的数组。结构:

info_t

您的原始问题还询问了如何从文本文件中读取数据。从文件中读取一行数据到#define MAX_PAIRS 332 typedef struct { char term[1000]; int zinteger; /* so named to avoid confusion */ int n_pairs; int_pair_t pairs[MAX_PAIRS]; } info_t; 缓冲区。然后,您可以使用strtok()来处理文件中的字段,使用空格作为分隔符。您可以将其与char组合以提取前2个字段(如果需要),并将剩余字段与sscanf()进行处理。