A: 2 5 3 1 2 4 6 2 4 3 5 2
B: 7 5 2 5 8 1 2 5 9 2
和新阵列看起来像:
C: 1 2 2 2 5 5
并且新数组的大小必须为6.
这是我到目前为止所做的。 (但它没有工作,我找不到问题)
int *same_same(int *ar1, int *ar2,int n, int m)
{
int *c;
int i=0,j=0,k=0;
int min=n;
if (n>m)
min=m;
c=(int *)calloc(min, sizeof(int));
bubble_sort (ar1, n);
bubble_sort (ar2, m);
while( i<n && j<m )
{
if (ar1[i] == ar2[j])
{
c[k++]=ar1[i++];
j++;
}
else if (ar1[i] < ar2[j])
i++;
else j++;
}
c=(int *)realloc(k, sizeof(int));
return c;
free (c);
}
完整代码为:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <assert.h>
int *input_array_dyn(int n)
{
int i;
int *a;
a=(int *)calloc(n, sizeof(int));
assert(a);
printf("enter the array of length %d\n",n);
for(i=0;i<n;i++)
scanf_s("%lf",a+i);
return a;
}
void swap(int *v,int *u) //function aid for ex3
{
int temp;
temp=*v;
*v=*u;
*u=temp;
}
void bubble_sort(int *a, int n)
{
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}
int *same_same(int *ar1, int *ar2,int n, int m)
{
int *c;
int i=0,j=0,k=0;
int min=n;
if (n>m)
min=m;
c=(int *)calloc(min, sizeof(int));
bubble_sort (ar1, n);
bubble_sort (ar2, m);
while( i<n && j<m )
{
if (ar1[i] == ar2[j])
{
c[k++]=ar1[i++];
j++;
}
else if (ar1[i] < ar2[j])
i++;
else j++;
}
c=(int *)realloc(k, sizeof(int));
return c;
free (c);
}
int main(void)
{
int *arr1 , *arr2 ,n,m; // input for Ex 3
printf_s("Please Insert Size of array one :\n");
scanf_s("%d",&n);
printf_s("Please Insert Size of array two :\n");
scanf_s("%d",&m);
printf_s("Please Insert numbers of array one :\n");
arr1=input_array_dyn(n);
printf_s("Please Insert numbers of array two :\n");
arr2=input_array_dyn(m);
printf_s("The new array is :\n");
same_same(arr1,arr2,n,m);
free (arr1);
free (arr2);
}
答案 0 :(得分:0)
以下是包含修复程序的版本。调用realloc()并不能保证返回的指针位于同一个地方。根据{{3}} “返回值。指向重新分配的内存块的指针,可能与ptr或新位置相同。”
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <assert.h>
#include <string.h>
void swap(int *v,int *u) //function aid for ex3
{
int temp;
temp=*v;
*v=*u;
*u=temp;
}
void bubble_sort(int *a, int n)
{
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}
void *same_same(int *ar1, int *ar2,int n, int m, int ** res, int * res_size)
{
int *c;
int i=0,j=0,k=0;
int min=n;
if (n>m)
min=m;
c=(int *)calloc(min, sizeof(int));
bubble_sort (ar1, n);
bubble_sort (ar2, m);
while( i<n && j<m )
{
if (ar1[i] == ar2[j])
{
c[k++]=ar1[i++];
j++;
}
else if (ar1[i] < ar2[j]){
i++;}
else j++;
}
// Fixes
*res_size = k;
(*res) = (int *) calloc(*res_size, sizeof(int));
memcpy(*res, c, (*res_size)*sizeof(int));
free(c);
}
//Example code
int main(void)
{
int arr1[] = {2, 5, 3, 1, 2, 4, 6, 2, 4, 3, 5, 2};
int arr2[] = {7, 5, 2, 5, 8, 1, 2, 5, 9, 2};
int n = sizeof(arr1)/sizeof(int);
int m = sizeof(arr2)/sizeof(int);
// input for Ex 3
int *res;
int res_size;
same_same(arr1,arr2,n,m, &res, &res_size);
int i;
for(i=0; i < res_size; i++)
printf("%d ", res[i]);
printf("\n");
return 0;
}