本文目錄一覽:
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的數組在創建後不可變得,因此數組合併的思想就是把數組塞到一個足夠大的空間里形成新數組。
上面的函數是比較簡單的合併方法
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/282812.html