2017-02-28 28 views
-2

我有5700行和3列二維數組。 必須消除該數組中的重複行,並且只打印多個重複行中的一行。 count = 5700。 例如,刪除二維數組中的重複記錄

24.742235 0.005334 0.052465  
27.345229 -0.222687 0.266042  
27.345229 -0.222687 0.266042  
25.528389 -0.063540 0.117000  
24.742235 0.005334 0.052465  
25.528389 -0.063540 0.117000  
24.742235 0.005334 0.052465  
25.528389 -0.063540 0.117000  
24.742235 0.005334 0.052465  
25.528389 -0.063540 0.117000  
27.345229 -0.222687 0.266042  
24.742235 0.005334 0.052465  
27.345229 -0.222687 0.266042  
25.528389 -0.063540 0.117000  
25.528389 -0.063540 0.117000  
27.345229 -0.222687 0.266042  
27.345229 -0.222687 0.266042  
24.742235 0.005334 0.052465  
24.742235 0.005334 0.052465  
27.345229 -0.222687 0.266042  

代碼:

for(p=0;p<count;p++) 
{ 
    for(ppp=p+1;ppp<count;ppp++) 
    { 
    if(plane[ppp][1]!=plane[p][1]) 
    { 
     printf("%lf\t%lf\t%lf\n",plane[p][0],plane[p][1],plane[p][2]); 
     printf("%lf\t%lf\t%lf\n",plane[ppp][0],plane[ppp][1],plane[ppp][2]); 
    } 
    } 
} 

我想從這個例子中刪除重複的行。第2行和第3行是相同的。所以我想只顯示行2或3。

+5

確定。問題是什麼? – MayurK

+0

我想從該示例中刪除重複的行。第2行和第3行是相同的。所以我想只顯示2或3的行。 –

+1

您忘記了發佈代碼。對於(ppp = p + 1; ppp Lundin

回答

0

一個直接的函數做,這是以下(注:仍然將被測試,因此認爲這是輪廓):

int A[5700][3]; 

int elimdups(void) 
{ 
    int i, j, k, m, n=5700; 
    for (i=0; i<n-1; i++) {      // for all rows 
     for (j=i+1; j<n-1; j++) {    // for all next rows 
      for (k=0; k<3; k++)     // for each cell 
       if (A[i][k]!=A[j][k]) break; // check cells equal 

      if (k<3) {       // row j is duplicate of row i 
       for (k=j; k<n-1; k++)   // move all rows up 
        for (m=0;m<3;m++) 
         A[k][m]= A[k+1][m]; 
       n--; 
      } 
     } 
    } 
    return n; 
}