给定一个半已知格式的文本文件。 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结构和数组。答案 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()
进行处理。