数组的条件语句:需要存储值不等于C中的索引值

时间:2016-10-25 16:44:53

标签: c arrays conditional

我有一个整数指针数组b_members,其中包含类似以下值的内容:

1 2 4

我想在循环中找到不等于特定值的b_members值,并将它们存储在另一个整数指针数组i_p中。

例如,在我的索引0循环中,我想找到并存储b_members中不等于1的两个值(即2和4)。所以对于第一次迭代

ip = 2 4

在第二次迭代中,我想在ip中存储1和4

ip = 1 4

在第三次迭代中,我想在ip中存储1和2

ip = 1 2

我可以使用下面的代码在Matlab中执行此操作,但我希望能够在C中执行此操作。

b_members = [1 2 4];
for i = b_members
    ip = b_members(b_members ~=i);
end

到目前为止,我在C中的所有内容:

int *b_members;
int *i_p;

b_members = Get_b_members(B,j); // fills b_members with array like [1 2 4]

for(int i=0;i<B->Columns;++i){ // going through all of b_members
    printf("%d ",b_members[i]);
    // Finding b_members not equal to b_members[i]
    for(int i2=0;i2<B->Columns;++i2){
        if (b_members[i2] != b_members[i])
            i_p = &b_members[i2];
            }
} // End b_members for loop

我似乎无法以正确的方式工作,i_p随着循环的进展而不断变长,我只希望它一次包含两个整数。有没有办法像我上面提供的Matlab代码那样做?任何帮助将不胜感激。

更新

使用Saurav Sahu的建议这有效:

        int **i_p = (int **)malloc(B->Columns * sizeof(int*));
        int tmp;
        for(int i=0;i<B->Columns;i++)
        {
            // Need to find b_members excluding b_members(i)
            i_p[i] = (int *)malloc((B->Columns-1) * sizeof(int));
            int idx = 0;
            for(int jj=0;jj<=B->Columns;jj++)
            {
                if(i==jj) continue;
                if(b_members[i] != b_members[jj])
                {
                    i_p[i][idx++] = b_members[jj];
                }
            }
            tmp = i;
        }

        for(int ii=0;ii<=tmp;++ii)
        {
            printf("\ti_p[%d] = ",ii);
            for(int it=0;it<(B->Columns)-1;++it)
            {
                printf("%d ",i_p[ii][it]);
            }
            printf("\n");
        }
        printf("\n");

1 个答案:

答案 0 :(得分:1)

您可以创建像this这样的整数指针的指针。为每个整数指针分配足够的大小以存储array_size-1整数。

int a[] = {1, 2, 4};
int aSize = sizeof(a)/sizeof(a[0]);
int **b = (int **)malloc(aSize * sizeof(int*));;
for(int i = 0; i < aSize; i++){
     b[i] = (int *)malloc((aSize-1) * sizeof(int));
     int idx = 0;
     for(int j = 0; j < aSize; j++){
        if(i == j) continue;
        if(a[i] != a[j]) {
            b[i][idx++] = a[j];
        }
     }
}

完美无缺。