連接兩個(gè)數(shù)組的函數(shù)C語言 連接兩個(gè)數(shù)組的函數(shù)c語言怎么寫

C語言怎么連接兩個(gè)一維數(shù)組?

先printf輸出一個(gè)數(shù)組的值,不要換行,加上空格后,再輸出另一個(gè)。

成都創(chuàng)新互聯(lián)主營福綿網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),福綿h5微信平臺小程序開發(fā)搭建,福綿網(wǎng)站營銷推廣歡迎福綿等地區(qū)企業(yè)咨詢

C語言之指針:連接兩個(gè)字符數(shù)組

程序最最主要的問題在于:你在connect函數(shù)中,返回了一個(gè)局部變量的地址,即局部變量c。

當(dāng)你返回這個(gè)指針(即局部變量c),你是想返回c這個(gè)數(shù)組的首地址是吧,確實(shí)是這樣,返回了這個(gè)地址值。但是,千萬要注意,當(dāng)你回到主函數(shù)時(shí),事實(shí)上那個(gè)數(shù)組早已經(jīng)不存在了,已經(jīng)銷毀了,也就是說里面的數(shù)據(jù)已經(jīng)不是那個(gè)connect函數(shù)中我們希望的數(shù)據(jù)了。在主函數(shù)中printf("%s",connect(a,b)); 當(dāng)然不會得到想要的結(jié)果了。不知道你明白了沒有*_*

我改進(jìn)了一下,僅供參考

#include "stdio.h"

//增加了一個(gè)參數(shù),即s,用于存放連接后的數(shù)組元素

char *connect(char *pa, char *pb, char *s)

{

char *pc = s;

int i=0,j=0;

while(*(pa+i)!='\0')

{

*(pc+i)=*(pa+i);

i++;

}

while(*(pb+j)!='\0')

{

*(pc+i)=*(pb+j);

i++;

j++;

}

return s;

}

int main()

{

char a[10],b[10];

char c[20]; //這個(gè)數(shù)組不放在connect函數(shù)中,而是在這里出現(xiàn),目的是為下面的調(diào)用提供接口

scanf("%s",a);

scanf("%s",b);

printf("%s\n", connect(a, b, c));

return 0;

}

你試試吧,可以正確執(zhí)行*_*

嘿嘿,對于這個(gè)程序呢,connect函數(shù)是有可以改進(jìn)之處的,我又做了一點(diǎn)改進(jìn),你要是愿意,可以看一下。

#include "stdio.h"

#include "string.h"

//這個(gè)connect函數(shù)是不是簡單了許多呢*_*

char *connect(char *pa, char *pb, char *s)

{

int n = strlen (pa);

strcpy (s, pa);

strcpy (s+n, pb);

return s;

}

int main()

{

char a[10],b[10];

char c[20];

scanf("%s",a);

scanf("%s",b);

printf("%s\n", connect(a, b, c));

return 0;

}

c語言,連接2個(gè)數(shù)組的方法???

首先你不能直接用靜態(tài)數(shù)組連接,因?yàn)槟銦o法控制編譯器如何分配內(nèi)存,事實(shí)上分配在堆上的數(shù)組是由操作系統(tǒng)分配的,因此你不能指望兩個(gè)數(shù)組是連續(xù)排列的,所以連接數(shù)組只能重新分配一個(gè)能包容兩個(gè)數(shù)組元素的新數(shù)組,并將兩個(gè)數(shù)組的元素復(fù)制過去,然后釋放掉原先的數(shù)組。

用動態(tài)數(shù)組實(shí)現(xiàn)以下核心代碼:

int?*?Link(int?*a,int?lenA,int?*b,int?lenB)?{

int?*p=new[lenA+lenB];//新建一個(gè)數(shù)組,數(shù)組大小為兩數(shù)組總和

int?*pp=p;//運(yùn)算指針

//復(fù)制數(shù)組不要自己使用循環(huán),那樣效率很低,應(yīng)該采用庫函數(shù)中的memcpy。

memcpy(pp,a,lenA*sizeof(int));//將數(shù)組a復(fù)制到新建內(nèi)存首地址

memcpy(pp+lenA,b,lenB*sizeof(int));//將數(shù)組b復(fù)制到前數(shù)組尾部

//如果需要,釋放數(shù)組a和b,當(dāng)然如果是靜態(tài)分配的數(shù)組,下面兩句可注釋掉

delete?[]a;

delete?[]b;

return?p;

}

其中sizeof(int)取整型類型的字節(jié)寬度,當(dāng)然你可以直接寫4,但是不同編譯器不同操作系統(tǒng)int類型的字節(jié)寬度可能不同,養(yǎng)成使用sizeof取類型寬度可以使你的代碼具有很好的兼容性,減少意外。

復(fù)制后指向會改變,我們還需要將p返回給調(diào)用者,因此不可以直接使用p進(jìn)行復(fù)制,需要建一個(gè)指針pp,復(fù)制p的值,利用pp復(fù)制數(shù)組。

pp+lenA可以讓pp指向復(fù)制后的數(shù)組a的尾部,在后面的位置復(fù)制b數(shù)組。

C語言,不用strcat,設(shè)計(jì)一個(gè)函數(shù),將兩個(gè)字符數(shù)組連接起來(要用指針的辦法)?

#includestdio.h

char *mystrcat(char t[],char s[]) {

char *p = s;

char *q = t;

while(*q) ++q;

while(*q++ = *p++);

return t;

}

int main() {

char s[] = "I love C language,";

char t[81] = "So do I.";

printf("連接之前:\ns[] = %s\nt[] = %s\n",s,t);

printf("連接之后:\nt[] = %s\n",mystrcat(s,t));

return 0;

}

分享文章:連接兩個(gè)數(shù)組的函數(shù)C語言 連接兩個(gè)數(shù)組的函數(shù)c語言怎么寫
鏈接分享:http://muchs.cn/article18/hgepgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、定制網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站排名、網(wǎng)站改版、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)