扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
数组里面貌似没有,只有字符串拼接,不过这中简单的变换你完全可以自己写个函数嘛
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站设计、淮上网络推广、小程序制作、淮上网络营销、淮上企业策划、淮上品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供淮上建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
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的数组在创建后不可变得,因此数组合并的思想就是把数组塞到一个足够大的空间里形成新嫌余数组。
上面的函数是比较简单的合睁者誉并方悉段法
首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。
用动态数组实现以下核心代码:
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数组。
strcat是字符串拼接函数,不是数组拼接函数,所以不能用行数于拼接两个数组。
可以用以下方法:
用数组冲带渣的话用memcpy。
用循散悄环把所有数组元素重新拷贝。
直接当字符串输入。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流