因此给定了一个数组:
input[3] = {0, 0, 0}
此输出:
output[3] = {3, 0 ,0}
代码:
void create_hist(double input[], int num_of_inputs, int output[])
{
int num_to_check = input[0];
int counter = 0;
for (int i = 0; i < num_of_inputs; i++)
{
int j = output[i];
if ((int)input[i] == num_to_check)
{
counter++; /* it was found */
}
output[j] = counter;
}
return;
}
但是如果我有浮点数组
input[5] = {0.0000, 1.0000, 2.0000, 3.0000, 4.000}
我想将值截断为int
,并计算范围为0到10的每个整数在输入数组中出现多少次,然后将其输出到:
output[5] = {1, 1, 1, 1, 1}
output[0] = {1} //indicates how many times 0 appeared in the array
或
input[10] = {1.000, 4.000, 5.0000, 2.000, 4.000, 7.000, 9.000, 6.000, 0.000, 0.000}
并输出
output[10] = {2, 1, 1, 0, 2, 1, 1, 1, 0, 1}
output[0] = {2} // this indicates how many times 0 appeared in the first array
谁能告诉我该怎么做?
答案 0 :(得分:2)
您不应使用output[i]
作为数组索引。它是一个计数器,而不是您想要计数的值。您应该使用(int)input[i]
作为索引。
首先需要将output
的所有元素初始化为0
,然后递增与每个输入的整数部分相对应的元素。
memset(output, 0, sizeof(output[0]) * MAX_INPUT_VALUE);
for (int i = 0; i < num_of_inputs; i++) {
output[(int)input[i]]++;
}