2013-08-27 100 views
2

我想使用指針方法來合併數組而不進行排序(再添加一個),但它只是打印第一個數組,然後是垃圾數值。我想要做的只是在一個大陣列中組合2個數組。不需要排序(至少現在)。合併兩個數組,而不使用數組排序

void getarray(int*,int); 
int merge(int*,int*,int,int,int*); 
main() 
{ 
int a[10],b[10],c[20]; 
int i,j,n,m,size; 
clrscr(); 
printf("Enter no. of elements in FIRST array: "); 
scanf("%d",&n); 
getarray(a,n); 
printf("Enter no. of elements in SECOND array: "); 
scanf("%d",&m); 
getarray(b,m); 
merge(a,b,n,m,c); 
printf("\nMerged Array: \n"); 
for(i=0;i<n+m;i++) 
{ 
    printf("\t%d\t",c[i]); 
} 
getch(); 
return 0; 
} 
void getarray(int *x, int y) 
{ 
int i; 
for(i=0;i<y;i++) 
{ 
    scanf("%d",x+i); 
} 
} 

int merge(int *a, int *b,int n,int m,int *c) 
{ 
    int i,j; 
for(i=0;i<n;i++) 
{ 
    *(c+i) = *(a+i); 
} 
    for(j=i;j<i+m;j++) 
    { 
    *(c+j) = *(b+j); 
    } 
} 
+1

嗨。要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後,如果有必要,你應該構造一個[最小測試用例](http://sscce.org)。) –

+0

@OliCharlesworth - 現在我不想發佈我剛發現的答案,因爲Devlin會通過找到他/她自己來學習更多東西。 – jpm

+0

老兄我已經嘗試了所有這些東西。我知道演習。仍然沒有得到照片。所以如果你想要幫助,請繼續。 – Crayator

回答

1
int merge(int *a, int *b,int n,int m,int *c) 
{ 
    int i,j; 
for(i=0;i<n;i++) 
{ 
    *(c+i) = *(a+i); 
} 
    for(j=0;j<m;j++) 
    { 
    *(c+n+j) = *(b+j); 
    } 
} 
+0

你在第二個循環中讓你的索引感到困惑。 – Jiminion

+0

謝謝你。我仍在學習。所以請原諒我的菜鳥錯誤。 – Crayator

+2

@Devlin別擔心。一些SO人可以是蟹肉。我們都有錯誤,我們錯過別人可以清楚地看到。隨時都會發生。 – Jiminion

2

或者您可以使用(假設c是足夠大):

void merge(int *a, int *b,int n,int m,int *c) { 
    memcpy(c, a, sizeof(int)*n); 
    memcpy(c+n, b, sizeof(int)*m); 
} 

您將需要包括string.h