数组的条件语句:需要在 C 中存储不等于索引值的值
Conditional Statement for Array: Need to Store Values Not Equal to Value at Index in C
我有一个整数指针数组 b_members,其中包含类似于以下值的内容:
1 2 4
我想在循环中找到不等于特定值的 b_members 的值,并将它们存储在另一个整数指针数组 i_p.
例如,在我的循环中索引 0 处,我想找到并存储 b_members 中不等于 1 的两个值(即 2 和 4)。所以对于第一次迭代
ip = 2 4
在第二次迭代中,我想在 ip 中存储 1 和 4,所以
ip = 1 4
在第三次迭代中,我想将 1 和 2 存储在 ip 中,所以
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");
您可以创建像 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];
}
}
}
效果很好。
我有一个整数指针数组 b_members,其中包含类似于以下值的内容:
1 2 4
我想在循环中找到不等于特定值的 b_members 的值,并将它们存储在另一个整数指针数组 i_p.
例如,在我的循环中索引 0 处,我想找到并存储 b_members 中不等于 1 的两个值(即 2 和 4)。所以对于第一次迭代
ip = 2 4
在第二次迭代中,我想在 ip 中存储 1 和 4,所以
ip = 1 4
在第三次迭代中,我想将 1 和 2 存储在 ip 中,所以
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");
您可以创建像 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];
}
}
}
效果很好。