2013-08-27 65 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