我可以提供我的程序输入文件,如下所示:
1 0 0 0 2 -1
16 70 -169 -580 75
1 0 4 0 -5
0 -9 3 5 -3
5 -4 3 -2 0
1.0 -3.4 5.4531 -4.2077 1.5092 -0.2030
这些线中的每一条代表多项式。例如,第一行代表x^6 + 2x^2 - 1
我正在尝试阅读此文件,但我不确定如何处理标签和新行。我也不确定如何处理系数和多项式的数量可以改变的事实。
现在我有:
polynomial** readPolyFile(FILE *polyFile){
polynomial *p = NULL;
int size = 1; /* Size to malloc */
polynomial **polynomials = NULL;
polyList = malloc(sizeof(polynomial*) * size); /* Initialize */
if(polyList == NULL){
fprintf(stderr, "%s %n: Could not allocate memory\n", __FILE__, __LINE__);
exit(-99);
}
/* Read all of the data from the file */
do {
}
}
我最初的想法是每次需要时增加大小,但我不确定这是否是最好的方法。
我对polynomial
的定义如下:
typedef struct
{
unsigned int nterms; /* number of terms */
double complex *polyCoef; /* coefficients */
} polynomial;
我想返回一个多项式结构列表。关于如何解决这个问题的任何建议?
答案 0 :(得分:2)
有关如何解决这个问题的任何建议吗?
将输入读入链表,然后在完成后形成数组。
一些快速代码,缺少必要的错误检查,以帮助您入门。
设置空链接列表
typedef struct LL {
polynomial *poly;
struct LL *next;
} LL;
LL head = { NULL, NULL };
LL *p = &head;
在循环内部,读取缓冲区中的一行,将其解析为polynomial
并附加到LL。
#define N 1000
count = 0;
char buf[N];
/* Read all of the data from the file */
while (fgets(buf, sizeof buf, polyFile)) {
p->next = malloc(sizeof *(p->next));
p = p->next;
// TBD code for OP.
// Hint: degree of polynomial < sizeof buf/2
p->poly = polyList_from_line(buffer);
p->next = NULL;
count++;
}
为阵列分配
polyList = malloc(sizeof *polyList * count);
p = head.next;
for (i=0; i< count; i++) {
assert(p);
polylist[i] = p->poly;
next = p->next;
free(p);
p = next;
}
return polylist;
子问题:更多伪代码读取制表符分隔数据
polynomial *polyList_from_line(char *buffer) {
double complex coef[some factor of N];
count = 0;
char *token = strtok(buffer, "\t");
while (token) {
// parse the token for a complex number
if (sscanf(buffer, tbd_format, tbd_variables) != expected_result)
break;
coef[count++] = ...
token = strtok(tbd_code);
}
// Malloc polynomial using count
// Populate polynomial from coef[]
// return allocation
}