C语言如何把三个数组合成一个数组 如a[]={1,2,3}b[]={4,5,6}c[]={7,8,9} 结:d[]={1,2,3,4,5,6,7,8,9,}?

   更新日期:2024.05.05

//O(n),完成合并

#include<stdio.h>

int merge(int a[],int b[],int n,int m){//合并两个有序数组

//原理是归并排序的合并阶段

//两个有序数组合并,仍保持有序 

int i=0,j=0;

int c[100]={0};//存储合并后的数组 

int k=0;

while(i<n&&j<m){

if(a[i]<b[j]){

c[k++]=a[i++];

}

else{

c[k++]=b[j++];

}

}

while(i<n){

c[k++]=a[i++];

}

while(j<m){

c[k++]=b[j++];

}

for(int i=0;i<k;i++){

a[i]=c[i];//合并后的数组存入a数组 

}

return k;//返回合并后的数组长度 

}

void print(int a[],int n){//打印数组 

for(int i=0;i<n;i++){

printf("%d ",a[i]);

}

printf("
");

}

int main(){

int a[20]={1,2,3};

int b[20]={4,5,6};

int c[20]={7,8,9}; 

int len1=3;//数组a的长度 

int len2=3;//数组b的长度 

int len3=3;//数组c的长度 

int len=0;//合并数组长度 

//经过两次合并 

len=merge(a,b,len1,len2);//数组a,b合并,存入数组a 

printf("a,b合并
");

print(a,len);//打印a,b合并结果 

len=merge(a,c,len,len3);//数组a,b,c合并,存入数组a 

printf("a,b,c合并
");

print(a,len);//打印a,b,c合并结果

return 0;

}



下面方法可以把三个int 数组合成一个新数组,新数组元素个数是 m。
已知的三个数组大小可以不等。
如果是 float 或 double 型,把程序中变量声明和 sizeof(int) 换成 相应类型即可。
#include <stdio.h>
int main()
{
int a[]={1,2,3},b[]={4,5,6},c[]={7,8,9},*d;
int n[3],m,i;
n[0]=sizeof(a)/sizeof(int);
n[1]=sizeof(b)/sizeof(int);
n[2]=sizeof(c)/sizeof(int);
m=n[0]+n[1]+n[2];
d = (int *) malloc(m * sizeof(int));
for (i=0;i<n[0];i++)d[i]=a[i];
for (i=0;i<n[1];i++)d[i+n[0]]=b[i];
for (i=0;i<n[2];i++)d[i+n[0]+n[1]]=c[i];
for (i=0;i<m;i++) printf("%d ",d[i]);
return 0;
}

设置一个字符串buffer,把三个数组分别循环一遍,放进buffer,用逗号隔开,然后再转化成一个数组!

循环,赋值,
都是一维数组可以用接字符串的方式延伸,不行的话就用循环,一步一步赋值!

你可以上网查查一些函数,有些函数可以拼接数组.我学的是java,最笨的方法就是写循环把每个数组值取出来然后对d数组进行赋值

  • 15591052163 :C语言中,如何把几个数组的值保存到一个数组里?
    杜戚怜4572 :答:定义一个大一点的数组,然后把所有的数组循环赋值给你定义的这个数组就行了啊,只不过是大的这个数组的下标一直往上加。include<stdio.h> int main(){ int x[200];int a[20],b[20],c[20];int i=0,j;for(j=...
  • 15591052163 :C语言中,如何把几个数组的值保存到一个数组里
    杜戚怜4572 :答:这个问题不难!这个很简单嘛。不过建议不要用数组,数组的话,太大浪费,太小会越界。可以用vector容器。你首先自己写个判断水仙花数的函数先,这里我假设就是boolhanshu(int);再定义一个足够大的数组.例如inta[1000];intn...
  • 15591052163 :51用c语言编程,怎么把两个二进制数组合成一个数?
    杜戚怜4572 :答:unsigned char n1=0x03; //11 unsigned char n2=0; //00 n1=n1<<2;n2|=0x03;用移位操作就可以完成
  • 15591052163 :...{2,5,7,9,1,4,5,3} 用C语言把两数组合成一个数组
    杜戚怜4572 :答:2]了 避免混淆形参和实参,可以将 void fun(int*a)写成 void fun(int* p)这样的意思就是p所指向的地方,即a[2]的值等于a[3]的值,其余i = 1、0都是一样的,将数组前3个的值换成数组第四个值 ...
  • 15591052163 :C语言从键盘任意输入三个1位的数,要求编程计算机并输出这三个1位数能...
    杜戚怜4572 :答:for ( i=0;i<2;i++ ) for ( j=i+1;j<3;j++ ) if ( a[i]
  • 15591052163 :C语言:从11个数中随机选3个组合在一起。
    杜戚怜4572 :答:写个 C 控制台的,它能够完成 从任意个数中随机选择任意个组合,并且按一下键盘,将这个组合显示出来。为什么会这样,这和你的说法不一致,因为你说的部分内容不好界定,就是"我敲165下任意键,逐个显示。"这一句。可以...
  • 15591052163 :C语言求从一个数组里挑数出来组合的问题
    杜戚怜4572 :答:include <iostream> using namespace std;int main(){ int a[]={1 ,2 ,3 ,4 ,5}, i, j, k,l;for(i=0;i<=4;i++){ for(j=0;j<=4;j++){ for(k=0;k<=4;k++){ for(l=0;l<=4;l++){ ...
  • 15591052163 :C语言编程 从键盘输入三个数放入一维数组array[3]中,按从小到大输出...
    杜戚怜4572 :答:include <stdio.h>void main(){ int i, array[3],a,b,c,t; for(i=0;i<3;i++) //这里3个数:0、1、2即可,不要等于3 scanf("%d",&array[i]); a=array[0]; b=array[1]; c...
  • 15591052163 :用c语言c++ 将你的学号,姓名,专业分别放在3个字符数组,使用字符串连 ...
    杜戚怜4572 :答:1、实际上就是实现strcat这个字符串库函数,在vc自带的crt源码或者linux平台的glibc库中都有strcat的源码,自己可以查阅参考,看看库开发者是如何写代码的,对于学习C语言非常有用。2、示例 include <stdio.h> char *strcat(...
  • 15591052163 :...把1、2、3、4、5、6、7、8、9这九个数组合成三个三位数。要求:每个...
    杜戚怜4572 :答:/// 判断3个三位数是否为不同数字组成 /// /// /// /// /// <returns></returns> static bool checkNum(int num1, int num2, int num3){ int[] list = new int[9];list[0] = num1 / 100;...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网