情况如下:
输入由空格分隔的整数/浮点数/双精度数据类型组成。数据类型将是相同的。输入的长度在运行时决定。输入显示如下(每行单个测试用例)
1 5 7 9
2 32 5 5 6
2 5 7 43 73 364
1 2
在使用map函数的python中,返回具有所需数据类型的输入列表。我需要使用C实现相同的功能。这是我到目前为止所尝试的内容:
fgets
并解析输入,但失败的可能性太大和/或很慢strtol()
,strok()
等功能,但它们仅在输入大小已知时才有效。有关如何进行的任何建议吗?
PS:已知最大输入数,输入数始终低于此任意大的值,但其数量可能会有所不同。
答案 0 :(得分: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
函数指针视为标识映射。另请注意,它执行堆分配并将所有权移至调用方。更合理的实现也许应该支持调用者拥有的缓冲区。