Gộp 2 mảng thành 1 mảng xen kẽ bằng con trỏ

mọi người cho em hỏi, em sai ở đâu với ạ, em xin cám ơn.
đề bài là gộp các phần tử của 2 mảng thành 1 mảng với các phần tử xen kẽ từ 2 mảng đó bằng con trỏ trong c

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void nhapmang(int *a, int n){
	for(int i=0;i<n;i++){
		printf("\na[%d]= ", i);
		scanf("%d", &a[i]);
	}
}

void xuatmang(int *a, int n){
	for(int i=0;i<n;i++){
		printf("\n\t\t%3d", a[i]);
	}
}

void gopmang(int *a, int *na, int *b, int *nb, int *c, int *nc){
	*nc=(*na)+(*nb);
		for(int i=0; i<(*nc);i+=2){
		for(int j=0, k=0;j<(*na), k<(*nb);j++, k++){
			c[i]=a[j];
			c[i+1]=b[k];
		}
	}
}

int main()
{
	int na,nb,nc;
	do{
		printf("\nNhap so phan tu cua mang: ");
		scanf("%d", &na);
		
		if(na<0)	printf("\nKhong hop le");
	}while(na<0);
	
	int *a=(int *)malloc(na*sizeof(int *));
	
	nhapmang(a,na);
	printf("\nMang vua nhap la: ");
	xuatmang(a,na);
	
	do{
		printf("\nNhap so phan tu cua mang: ");
		scanf("%d", &nb);
		
		if(nb<0)	printf("\nKhong hop le");
	}while(nb<0);
	
	int *b=(int *)malloc(nb*sizeof(int *));
	
	nhapmang(b,nb);
	printf("\nMang vua nhap la: ");
	xuatmang(b,nb);

	int *c=(int *)malloc(nc*sizeof(int *));
	gopmang(a,&na,b,&nb,c,&nc);
	printf("\nMang sau khi gop la: ");
	xuatmang(c,nc);
	getch();
	return 0;
}

Vậy nếu mảng này dài hơn mảng kia thì sao bạn :smiley:

1 Like

à, đoạn đó em đang làm kiểu 1 trường hợp thôi ạ. nhưng vấn đề của em lúc in ra mảng gộp thì sai ạ

@rogp10 em sửa rồi, anh/ chị xem giùm em với ạ, vì vẫn sai ạ

cho cái đề đầy đủ đi bạn , mảng là hằng con trỏ mà chỉ đi đâu nữa , mà mỗi mảng đều là n phần tử hay sao cái đề thiếu thiếu vậy sao biết làm

1 Like

dạ, đề bài chỉ bảo ghép 2 mảng thành 1 mảng xen kẽ phần tử trong C thôi ạ
ví dụ: a[3]={1,2,3}
b[3]={4,5,6}
ghép ra mảng c[ ]={1,4,2,5,3,6} ạ

Nhìn vào hàm gopmang sẽ thấy hai vòng lặp lồng nhau (?!) :smiley:

Bài này viết bằng con trỏ thì tuyệt vời ông mặt trời :smiley: đại loại ntn

char* strcpy(char* dest, const char* src) {
  char* tmp = dest; // viết theo spec :D
  while(*dest++ = *src++); // câu này để nhớ thứ tự giữa * và ++
  return tmp;
}
3 Likes

love love love <3 thank you so muchhh

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?