情况如下:
输入由空格分隔的整数/浮点数/双精度数据类型组成.数据类型将是相同的.输入的长度在运行时决定.输入显示如下(每行单个测试用例)
1 5 7 9
2 32 5 5 6
2 5 7 43 73 364
1 2
Run Code Online (Sandbox Code Playgroud)
在使用map函数的python中,返回具有所需数据类型的输入列表.我需要使用C实现相同的功能.这是我到目前为止所尝试的内容:
fgets和解析输入,但失败和/或缓慢的机会太多strtol(),strok()等等,但他们只当输入的尺寸是已知的工作.有关如何去做的任何建议?
PS:已知最大输入数,输入数始终低于此任意大的值,但它们的数量可能不同.
你的问题包含很多关于与之无关的事情的讨论map().你应该尽量避免这种情况,并且要更加专注.如果你想知道几件事情,把它们分成自己的问题,不要只是喋喋不休地讨论整个问题.
在C中,没有办法编写一般的"应用此函数"代码,而没有首先发明一种描述所涉及的所有数据的方法,那么它可能是可能的.
如果数据是整数,则需要以下内容:
int * map_int(const int *input, size_t input_len, int (*func)(int x));
Run Code Online (Sandbox Code Playgroud)
上面应该返回一个与输入大小相同的动态分配数组,其中每个元素都是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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,上述内容将假定func有效; 更合理的通用函数应该将NULL函数指针视为标识映射.另请注意,它执行堆分配并将所有权移至调用方.更合理的实现也许应该支持调用者拥有的缓冲区.