本文目录一览:
c语言,怎样合并数组
//两个数组合并,参考代码:
#include "stdio.h"
int d=0; //用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
int a[50],b[50],c[100];
int i,j,k; //i表示a数组的大小 j表示b数组的大小 k用于数组的输出
printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
scanf("%d",i);
for(k=0;ki;k++)
scanf("%d",a[k]);
printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
scanf("%d",j);
for(k=0;kj;k++)
scanf("%d",b[k]);
void px(int *p,int n); //声明 排序 冒泡法
px(a,i); //调用
px(b,j); //调用
void prin(int *p,int n); //声明 数组的输出函数
prin(a,i);
prin(b,j);
void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数 前提:这俩个数组必须是排好序的
hb(c,a,b,i,j);
prin(c,d);
}
void px(int *p,int n) //自定义函数 排序 冒泡法
{int i,j,t,leap;
for(i=0;in-1;i++) //外层循环n-1次,一次循环沉淀一个数
{
leap=0; //leap作为标记,是否两数相换
for(j=0;jn-i-1;j++) //内循环n-i-1次
{
if(p[j]p[j+1]) //比较两个数
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t; //来两个数交换
leap=1; //交换了,标记leap=1
}
}
if(leap==0) break; //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}
void prin(int *p,int n) //自定义函数 数组输出函数
{
int k,sum=0;
for(k=0;kn;k++)
{
printf("%d ",p[k]);
sum++;
if(sum%10==0) printf("\n");
}
printf("\n");
}
void hb(int *o,int *p,int *q,int m,int n) //m为p指向数组的大小 n为q指向数组的大小 指针o指向合并的数组
{
int i=0,j=0,k; //i为p指向数组的大小 j为q指向数组的大小
while(1)
{
if(p[i]q[j])
{
o[d]=p[i];
i++;
d++;
}
else
{
o[d]=q[j];
j++;
d++;
}
if(i==m||j==n) break;
}
if(i==m)
{
for(k=j;kn;k++)
{
o[d]=q[k];
d++;
}
}
if(j==n)
{
for(k=i;km;k++)
{
o[d]=p[k];
d++;
}
}
}
c语言把几个数组的数据连接起来
#includestdio.h
int main(){
unsigned long a[4]={0x232323, 0x232323, 0x232323, 0x232323};//字符'#'的ASCII码为0x23
char b[16];
char *p=(char *)a;
int i;
for(i=0; i16; i++){
b[i]=*(p+i);
putchar(b[i]);
}
return 0;
}
怎么用c语言将两个数组并起来?
看代码,写了几种数组的合并:
#includestdio.h
#includestdlib.h
#includestring.h
void character()
{
char c1[]={'H','e','l','l','o'};
char c2[]={' ','w','o','r','l','d','!'};
int k=0;
char new_c[100];
for(int i=0;isizeof(c1);i++)//注意是sizeof()
new_c[k++]=c1[i];
for( i=0;isizeof(c2);i++)
new_c[k++]=c2[i];
new_c[k]='\0';
puts(new_c);
}
void string()
{
char s1[]={"hello,"};
char s2[]={"c语言!"};
int k=0;
char new_s[100];
for(int i=0;istrlen(s1);i++)//注意是strlen()
new_s[k++]=s1[i];
for(i=0;istrlen(s2);i++)
new_s[k++]=s2[i];
new_s[k]='\0';
puts(new_s);
}
void number()
{
int num1[]={1,2,3},*p1=num1;
int num2[]={4,5,6,'\0'};//整型数组,字符数组是没有结束符号,自己加入‘\0’
int new_num[100];
int k=0;
for(int i=0;isizeof(num1)/sizeof(int);i++)
{
new_num[k++]=*(p1++);
}
for(i=0;num2[i]!=0;i++)
{
new_num[k++]=num2[i];
}
new_num[k]='\0';
for(i=0;new_num[i]!=0;i++)
{
printf("%d ",new_num[i]);
}
puts("");
}
void main()
{
character();//字符数组的合并
string();//字符串的合并
number();//整型数组的合并,做法是一样的
}
运行截图:
c语言,连接2个数组的方法???
首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。
用动态数组实现以下核心代码:
int * Link(int *a,int lenA,int *b,int lenB) {
int *p=new[lenA+lenB];//新建一个数组,数组大小为两数组总和
int *pp=p;//运算指针
//复制数组不要自己使用循环,那样效率很低,应该采用库函数中的memcpy。
memcpy(pp,a,lenA*sizeof(int));//将数组a复制到新建内存首地址
memcpy(pp+lenA,b,lenB*sizeof(int));//将数组b复制到前数组尾部
//如果需要,释放数组a和b,当然如果是静态分配的数组,下面两句可注释掉
delete []a;
delete []b;
return p;
}
其中sizeof(int)取整型类型的字节宽度,当然你可以直接写4,但是不同编译器不同操作系统int类型的字节宽度可能不同,养成使用sizeof取类型宽度可以使你的代码具有很好的兼容性,减少意外。
复制后指向会改变,我们还需要将p返回给调用者,因此不可以直接使用p进行复制,需要建一个指针pp,复制p的值,利用pp复制数组。
pp+lenA可以让pp指向复制后的数组a的尾部,在后面的位置复制b数组。
C语言怎么连接两个一维数组?
先printf输出一个数组的值,不要换行,加上空格后,再输出另一个。
c语言怎么合并两个数组
int main() {
char a[] = "123456";
char b[] = "abcde";
int buflen = strlen(a) + strlen(b);
char *p = (char*)malloc(buflen + 1);
memset(p, 0, buflen);
printf("%d\n", buflen);
strcpy(p, a);
strcat(p, b);
printf("%s\n", p);
free(p);
}
C的数组在创建后不可变得,因此数组合并的思想就是把数组塞到一个足够大的空间里形成新数组。
上面的函数是比较简单的合并方法