C语言数组复制
如何把一个数组里后面的数复制到另一个数组的后面#include<stdio.h>
#include<string.h>
int main()
{
char M = 6; char N = 7; int i = 0, j = 0, k = 0, t = 0;
int a = { 1,3,5,7,9,11 }; int b = { 2,4,6,8,10,12,14 }; int c;
for (i = 0; i < M; i++) {
printf("%d ", a);
}
printf("\n");
for (i = 0; i < N; i++) {
printf("%d ", b);
}
printf("\n");
while (j < M && k < N) {
if (a <= b) {
c = a; j++; t++;
}
else {
c = b; k++; t++;
}
}
if (j < M) {
memcpy(c,M+N-j-k,a);
}
else if (k < N) {
memcpy(c,M+N-j-k,b);
}
t = 0;
for (t = 0; t < M + N; t++) {
printf("%d ", c);
}
return 0;
} 本帖最后由 jackz007 于 2022-11-19 22:00 编辑
#include<stdio.h>
void show(int d[] , int n)
{
printf("%d" , d) ;
for(int i = 1 ; i < n ; i ++) printf(" %d" , d) ;
printf("\n") ;
}
int main(void)
{
int i , j , M = 6 , N = 7 ;
int a = {1,3,5,7,9,11 } , b = {2,4,6,8,10,12,14 } , c ;
for(i = 0 ; i < M ; i ++) c = a ;
for(j = 0 ; j < N ; j ++) c = b ;
show(a , M) ;
show(b , N) ;
show(c , M + N) ;
}
编译运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
1 3 5 7 9 11
2 4 6 8 10 12 14
1 3 5 7 9 11 2 4 6 8 10 12 14
D:\\C> 你这应该是要把2个数组合并成一个数组吧 在您的代码中,您已经将数组a和数组b按照从小到大的顺序合并到了数组c中。如果您想要将数组b中后面的数复制到数组c的后面,可以在while循环结束之后,使用memcpy函数将数组b中剩余的元素复制到数组c的后面,如下所示:
memcpy(c + t, b + k, (N - k) * sizeof(int));
这里的参数c + t表示将数组b中剩余的元素从数组c的第t个位置开始复制,b + k表示从数组b的第k个元素开始复制,(N - k) * sizeof(int)表示要复制的元素个数,即数组b中剩余的元素个数。
请注意,这个memcpy函数需要在while循环结束之后使用,因为在while循环中,我们已经将数组a和数组b中的元素按照从小到大的顺序合并到数组c中了,而在memcpy函数中,我们只需要将数组b中剩余的元素复制到数组c的后面即可。
修改后的代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
// 定义数组a、b、c以及相关变量
char M = 6; char N = 7; int i = 0, j = 0, k = 0, t = 0;
int a = { 1,3,5,7,9,11 }; int b = { 2,4,6,8,10,12,14 }; int c;
// 输出数组a和数组b的元素
for (i = 0; i < M; i++) {
printf("%d ", a);
}
printf("\n");
for (i = 0; i < N; i++) {
printf("%d ", b);
}
printf("\n");
// 将数组a和数组b按照从小到大的顺序合并到数组c中
while (j < M && k < N) {
if (a <= b) {
c = a; j++; t++;
}
else {
c = b; k++; t++;
}
}
// 如果数组b中还有剩余元素,则将剩余元素复制到数组c的后面
if (j >= M && k < N) {
memcpy(c + t, b + k, (N - k) * sizeof(int));
}
// 输出数组c的元素
t = 0;
for (t = 0; t < M + N; t++) {
printf("%d ", c);
}
// 返回0表示程序正常结束
return 0;
}
输出结果为 1 2 3 4 5 6 7 8 9 10 11 12 14,可以看到数组b中后面的元素已经被复制到了数组c的后面。
页:
[1]