情况如下:
输入由空格分隔的整数/浮点/双精度数据类型组成。数据类型将相同。输入的长度在运行时确定。输入如下(每行一个测试用例)

1 5 7 9
2 32 5 5 6
2 5 7 43 73 364
1 2

在使用map函数的python中,返回具有所需数据类型的输入列表。我需要用C来实现同样的功能。到目前为止,我已经做了如下尝试:
使用fgets并解析输入,但失败和/或速度太慢的可能性太大
使用strtol()strok()等函数,但它们仅在已知输入大小时才起作用。
有什么建议吗?
PS:输入的最大数目是已知的,输入的数量总是低于这个任意大的值,但是它们的数目可以变化。

最佳答案

你的问题包含了很多与map()无关的话题。你应该尽量避免这种情况,集中精力。如果有几件事你想知道,把它们分为自己的问题,不要对整个问题大喊大叫。
在C语言中,如果不首先发明一种描述所有相关数据的方法,就无法编写通用的“应用此函数”代码,那么这可能是可能的。
如果数据是整数,则需要如下内容:

int * map_int(const int *input, size_t input_len, int (*func)(int x));

上面应该返回一个与输入相同大小的动态分配数组,其中每个元素都是在相应的输入元素上运行func()的结果。这可能是一个通用的map()你需要来这里。
这可以简单地实现,比如:
int * map_int(const int *input, size_t input_len, int (*func)(int x))
{
  int *out = malloc(input_len * sizeof *out);
  if(out != NULL)
  {
    for(size_t i = 0; i < input_len; ++i)
      out[i] = func(input[i]);
  }
  return out;
}

注意,上面的假设func是有效的;更合理的通用函数应该将NULL函数指针视为标识映射。还要注意,它执行堆分配并将所有权移动到调用方。一个更合理的实现可能也应该支持调用方拥有的缓冲区。

09-10 08:04
查看更多