pengpengniuniu 发表于 2022-11-19 18:31:54

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 19:07:16

本帖最后由 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>

ba21 发表于 2022-11-19 21:23:38

你这应该是要把2个数组合并成一个数组吧

不二猫猫 发表于 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 = { 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]
查看完整版本: C语言数组复制