一、工作场景:
在实际工作场景中,需要从存储了数据的一个数组中截取数据:
1、截取方向允许:(1)从左向右(即:从首部向尾部);(2)从右向左(即:从尾部向首部)。
2、按指定比例截取数据:50%~100%(不得少于 50%)。
3、因为是以动态链接库(DLL)文件的方式提供给 Java 程序调用,所以增加了以下参数:输入数组的大小、输出数组的大小。
二、代码特点:
我最得意的是计算确定提取数据起始位置下标的那部分。
两句代码搞定,自诩为神来之笔。------得意一下,哈哈哈。。。。
三、实现代码:
//样本数据截取
extern "C" __declspec(dllexport) int SampleDataTruncate(double* input, long size, int direct, int ratio, double* output, long &size_output) {
if (ratio < 50) return 1; //截取比例不得小于 50%
long start(0), end(0);
//direct取值只能是1或2(1-从左开始截取 2-从右开始截取)
switch (direct)
{
case 1:
//计算从左截取起始下标
start = 0;
end = size*ratio / 100;
break;
case 2:
//计算从右截取起始下标
start = size* (100 - ratio) / 100;
end = size;
break;
default:
return 1;
}
long j(0);
for (long i = start; i < end; i++)
{
output[j] = input[i];
++j;
}
size_output = j;
return 0;
}