2

情况如下:

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

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

在 python 中使用 map 函数,返回具有所需数据类型的输入列表。我需要使用 C 来实现相同的功能。这是我到目前为止所尝试的:

  1. 使用fgets和解析输入,但失败和/或速度慢的机会太多
  2. 使用 等函数strtol()strok()但它们仅在输入的大小已知时才起作用。

关于如何去做的任何建议?

PS:输入的最大数量是已知的,输入的数量总是低于这个任意大的值,但是它们的数量可以变化。

4

1 回答 1

7

你的问题中包含了很多无关的话题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函数指针视为恒等映射。另请注意,它会进行堆分配并将所有权转移给调用者。一个更合理的实现也许也应该支持调用者拥有的缓冲区。

于 2013-11-11T13:19:25.133 回答