鱼C论坛

 找回密码
 立即注册
查看: 752|回复: 3

C语言数组复制

[复制链接]
发表于 2022-11-19 18:31:54 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何把一个数组里后面的数复制到另一个数组的后面
#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[6] = { 1,3,5,7,9,11 }; int b[7] = { 2,4,6,8,10,12,14 }; int c[13];
        for (i = 0; i < M; i++) {
                printf("%d ", a[i]);
        }
        printf("\n");
        for (i = 0; i < N; i++) {
                printf("%d ", b[i]);
        }
        printf("\n");
        while (j < M && k < N) {
                if (a[j] <= b[k]) {
                        c[t] = a[j]; j++; t++;
                }
                else {
                        c[t] = b[k]; k++; t++;
                }
        }
        if (j < M) {
                memcpy(c[j + k],M+N-j-k,a[j]);
        }
        else if (k < N) {
                memcpy(c[j + k],M+N-j-k,b[k]);
        }
        t = 0;
        for (t = 0; t < M + N; t++) {
                printf("%d ", c[t]);
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 19:07:16 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-19 22:00 编辑
#include<stdio.h>

void show(int d[] , int n)
{
        printf("%d" , d[0])                                ;
        for(int i = 1 ; i < n ; i ++) printf(" %d" , d[i]) ;
        printf("\n")                                       ;
}

int main(void)
{
        int i , j , M = 6 , N = 7                                       ;
        int a[6] = {1,3,5,7,9,11 } , b[7] = {2,4,6,8,10,12,14 } , c[13] ;
        for(i = 0 ; i < M ; i ++) c[i] = a[i]                           ;
        for(j = 0 ; j < N ; j ++) c[i + j] = b[j]                       ;
        show(a , M)                                                     ;
        show(b , N)                                                     ;
        show(c , M + N)                                                 ;
}
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\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:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-19 21:23:38 | 显示全部楼层
你这应该是要把2个数组合并成一个数组吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-20 03:35:52 | 显示全部楼层
在您的代码中,您已经将数组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[6] = { 1,3,5,7,9,11 }; int b[7] = { 2,4,6,8,10,12,14 }; int c[13];

        // 输出数组a和数组b的元素
        for (i = 0; i < M; i++) {
                printf("%d ", a[i]);
        }
        printf("\n");
        for (i = 0; i < N; i++) {
                printf("%d ", b[i]);
        }
        printf("\n");

        // 将数组a和数组b按照从小到大的顺序合并到数组c中
        while (j < M && k < N) {
                if (a[j] <= b[k]) {
                        c[t] = a[j]; j++; t++;
                }
                else {
                        c[t] = b[k]; 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[t]);
        }

        // 返回0表示程序正常结束
        return 0;
}
输出结果为 1 2 3 4 5 6 7 8 9 10 11 12 14,可以看到数组b中后面的元素已经被复制到了数组c的后面。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表