鱼C论坛

 找回密码
 立即注册
查看: 1034|回复: 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. void show(int d[] , int n)
  3. {
  4.         printf("%d" , d[0])                                ;
  5.         for(int i = 1 ; i < n ; i ++) printf(" %d" , d[i]) ;
  6.         printf("\n")                                       ;
  7. }

  8. int main(void)
  9. {
  10.         int i , j , M = 6 , N = 7                                       ;
  11.         int a[6] = {1,3,5,7,9,11 } , b[7] = {2,4,6,8,10,12,14 } , c[13] ;
  12.         for(i = 0 ; i < M ; i ++) c[i] = a[i]                           ;
  13.         for(j = 0 ; j < N ; j ++) c[i + j] = b[j]                       ;
  14.         show(a , M)                                                     ;
  15.         show(b , N)                                                     ;
  16.         show(c , M + N)                                                 ;
  17. }
复制代码

        编译运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 1 3 5 7 9 11
  4. 2 4 6 8 10 12 14
  5. 1 3 5 7 9 11 2 4 6 8 10 12 14

  6. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-19 21:23:38 | 显示全部楼层
你这应该是要把2个数组合并成一个数组吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-20 03:35:52 | 显示全部楼层
  1. 在您的代码中,您已经将数组a和数组b按照从小到大的顺序合并到了数组c中。如果您想要将数组b中后面的数复制到数组c的后面,可以在while循环结束之后,使用memcpy函数将数组b中剩余的元素复制到数组c的后面,如下所示:

  2. memcpy(c + t, b + k, (N - k) * sizeof(int));
  3. 这里的参数c + t表示将数组b中剩余的元素从数组c的第t个位置开始复制,b + k表示从数组b的第k个元素开始复制,(N - k) * sizeof(int)表示要复制的元素个数,即数组b中剩余的元素个数。

  4. 请注意,这个memcpy函数需要在while循环结束之后使用,因为在while循环中,我们已经将数组a和数组b中的元素按照从小到大的顺序合并到数组c中了,而在memcpy函数中,我们只需要将数组b中剩余的元素复制到数组c的后面即可。

  5. 修改后的代码如下:

  6. #include<stdio.h>
  7. #include<string.h>

  8. int main()
  9. {
  10.         // 定义数组a、b、c以及相关变量
  11.         char M = 6; char N = 7; int i = 0, j = 0, k = 0, t = 0;
  12.         int a[6] = { 1,3,5,7,9,11 }; int b[7] = { 2,4,6,8,10,12,14 }; int c[13];

  13.         // 输出数组a和数组b的元素
  14.         for (i = 0; i < M; i++) {
  15.                 printf("%d ", a[i]);
  16.         }
  17.         printf("\n");
  18.         for (i = 0; i < N; i++) {
  19.                 printf("%d ", b[i]);
  20.         }
  21.         printf("\n");

  22.         // 将数组a和数组b按照从小到大的顺序合并到数组c中
  23.         while (j < M && k < N) {
  24.                 if (a[j] <= b[k]) {
  25.                         c[t] = a[j]; j++; t++;
  26.                 }
  27.                 else {
  28.                         c[t] = b[k]; k++; t++;
  29.                 }
  30.         }

  31.         // 如果数组b中还有剩余元素,则将剩余元素复制到数组c的后面
  32.         if (j >= M && k < N) {
  33.                 memcpy(c + t, b + k, (N - k) * sizeof(int));
  34.         }

  35.         // 输出数组c的元素
  36.         t = 0;
  37.         for (t = 0; t < M + N; t++) {
  38.                 printf("%d ", c[t]);
  39.         }

  40.         // 返回0表示程序正常结束
  41.         return 0;
  42. }
  43. 输出结果为 1 2 3 4 5 6 7 8 9 10 11 12 14,可以看到数组b中后面的元素已经被复制到了数组c的后面。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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