arrays - 如何在C代码中使用给定的输入数组生成特定值的数组
问题描述
标题可能有点混乱,所以我将在这里更详细地解释我的目标;我想编写一个代码,该代码采用 x 数字的输入数组
index_x = [0,0,1,0,1,0,0,0,1,0,0,1,0];
然后我想编写一个逻辑,它将生成一个包含所有 1 索引的数组
index_ones = [3,5,9,12];
当前代码从 Jacon 稍作修改:
编辑1:
#include <stdio.h>
int index_x[] = {0,0,1,0,1,0,0,0,1,0,0,1,0}; // any number of elements
int len = 12;
int main(void) {
int arr[len];
int j = 0;
for (int i = 0; i < len; i++)
if (index_x[i])
arr[j++] = i; // save and advance j only if value is "1"
for (int i = 0; i < j; i++) // only print below j !
printf("%d\n", arr[i]);
}
输出:
2
4
8
11
从这个输出中,我想生成另一个数组,它是这些元素之间的差异。在这种情况下,新数组将是 {2,4,3}。
编辑 2:我将把它移到另一个线程,因为讨论现在已经从一个问题转移到另一个问题。不想让未来的用户复杂化。
解决方案
由于您不知道需要多少索引,因此您需要动态分配内存。您还需要记住索引的数量
struct index
{
size_t size;
size_t indexes[];
};
struct index *addIndex(struct index *index, size_t pos)
{
size_t new_size = index ? index -> size + 1 : 1;
index = realloc(index, sizeof(*index) + new_size * sizeof(index -> indexes[0]));
if(index)
{
index -> size = new_size;
index -> indexes[new_size - 1] = pos;
}
return index;
}
struct index *buildIndex(int *arr, size_t arr_size, int val)
{
struct index *index = NULL, *tmp;
for(size_t pos = 0; pos < arr_size; pos++)
{
if(arr[pos] == val)
{
tmp = addIndex(index, pos);
if(tmp) index = tmp;
else { /* error handling */ }
}
}
return index;
}
推荐阅读
- reactjs - HEROKU react-router错误对象不是函数
- excel - Excel VBA 转大写
- c# - .NET 5.0:在多项目解决方案中构建项目
- regex - 使用正则表达式如何知道字符串的值是否为零?
- groovy - 遍历 Json 映射,创建带有嵌入链接的 html 表
- mongodb - MongoDB查找两个查询结果之间的交集
- python - 如何减去两个日期列,结果仅为正整数
- python - 调用“python3”会导致分段错误
- c# - 创建一个自定义 BindableProperty,它采用 XAML 中基础返回类型的自定义定义字符串表示形式
- c# - 在删除之前修改字典的元素