2016-10-25 25 views
0

我有一個包含類似以下值的整數指針數組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薩胡的建議這個工作:

 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"); 
+0

你打算如何處理輸入數組中的重複值?你還會添加它們嗎? –

+0

我不認爲重複值很重要,如果b_members = [1 6 6],第一次迭代會給i_p = [6 6],第二次會給i_p = [1 6],第三次會給i_p = [1 6] 。 – user3716193

回答

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]; 
     } 
    } 
} 

它完美地工作。