首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C99中读取标签分离的数据

在C99中读取标签分离的数据
EN

Stack Overflow用户
提问于 2016-10-24 14:36:26
回答 1查看 60关注 0票数 1

我可以给我的程序输入文件,如:

代码语言:javascript
复制
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

我试图在这个文件中阅读,但不知道如何处理选项卡和新行。我也不知道如何处理系数和多项式的数量可以改变的事实。

现在我有:

代码语言:javascript
复制
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的定义如下:

代码语言:javascript
复制
typedef struct
{
    unsigned int nterms;       /* number of terms */
    double complex *polyCoef;  /* coefficients    */
} polynomial;

我想返回一个多项式结构的列表。对如何解决这个问题有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 20:10:52

对如何解决这个问题有什么建议吗?

将输入读入链接列表,完成后形成数组。

一些快速的代码,缺乏必要的错误检查,让你开始。

设置一个空链接列表

代码语言:javascript
复制
typedef struct LL {
  polynomial *poly;
  struct LL *next;
} LL;
LL head = { NULL, NULL };
LL *p = &head;

在循环中,读取缓冲区中的一行,将其解析为polynomial并附加到LL中。

代码语言:javascript
复制
#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++;
}

为数组分配

代码语言:javascript
复制
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;

子问题:读取选项卡分隔数据的更多伪代码

代码语言:javascript
复制
  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
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档