C语言 合并或合并2数组与循环或函数

f87krz0w  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(74)

我使用Visual 2010。我需要从2个其他数组创建一个数组,或者一个函数来合并它们;我来自PHP,所以我很抱歉,如果这是愚蠢的。我测试了一些循环没有成功。
一个真实的例子可能会有所帮助:

int arrayA[5] = {3,2,1,4,5} 
int arrayB[5] = {6,3,1,2,9}

字符串
第三个arrayC的输出应该是:

arrayC {
[3][6]
[2][3]
[2][1]
[4][2]
[5][9]
}

toiithl6

toiithl61#

一个简单的方法可以如下所示

#include <stdio.h>

#define N   5

int main( void )
{
    int a[N] = { 3, 2, 2, 4, 5 }; 
    int b[N] = { 6, 3, 1, 2, 9 };
    int c[N][2];

    for ( size_t i = 0; i < N; i++ )
    {
        c[i][0] = a[i]; c[i][1] = b[i];
    }

    for ( size_t i = 0; i < N; i++ ) printf( "%d, %d\n", c[i][0], c[i][1] ); 

    return 0;
}

字符串
程序输出为

3, 6
2, 3
2, 1
4, 2
5, 9


如果要编写一个函数来合并任意大小的数组,则可以如下所示:

#include <stdio.h>
#include <stdlib.h>

#define N   5

int ** merge( int *a, int *b, size_t n )
{
    int **c = malloc( n * sizeof( int * ) );

    if ( c != NULL )
    {
        size_t i = 0;
        for ( ; i < n && ( c[i] = malloc( 2 * sizeof( int ) ) ); i++ )
        {
            c[i][0] = a[i]; c[i][1] = b[i];
        }

        if ( i != n )
        {
            while ( i-- ) free( c[i] );
            free( c );
            c = NULL;
        }
    }

    return c;
}   

int main( void )
{
    int a[N] = { 3, 2, 2, 4, 5 }; 
    int b[N] = { 6, 3, 1, 2, 9 };
    int **c;

    c = merge( a, b, N );

    if ( c != NULL )
    {
        for ( size_t i = 0; i < N; i++ ) printf( "%d, %d\n", c[i][0], c[i][1] ); 
        for ( size_t i = 0; i < N; i++ ) free( c[i] );
        free( c );
    }

    return 0;
}


程序输出将与上图所示相同。

5q4ezhmt

5q4ezhmt2#

我是这样理解的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int arrayA[5] = {3,2,2,4,5};
    int arrayB[5] = {6,3,1,2,9};

    int arrayC[5][5];
    int i,j;

    for(i=0; i<5; i++)
    {
        int a = arrayA[i]*10 + arrayB[i];
        arrayC[i][0] = a;
    }

    for(i=0; i<5; i++)
    {
        printf("%d ", arrayC[i][0]);
        printf("\n");
    }

    return 0;
}

字符串
评论后:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int arrayA[5] = {3,2,2,4,5};
    int arrayB[5] = {6,3,1,2,9};

    int arrayC[5];
    int i,j;

    for(i=0; i<5; i++)
    {
        arrayC[arrayA[i]] = arrayB[i];
    }

    for(i=0; i<5; i++)
    {
        printf("[%d %d]",arrayA[i], arrayC[arrayA[i]]);
        printf("\n");
    }

    return 0;
}

ee7vknir

ee7vknir3#

你可以在C++中做到这一点。

#include <iostream>
using namespace std;

int main()
{
int arrayA[5] = {3,2,2,4,5};
int arrayB[5] = {6,3,1,2,9};
int arrayC[10];
int a=0;
int b=0;
bool use_a= true;
bool use_b = false;

for ( int i =0  ; i <10 ; i++ )
{
if(use_a){
arrayC[i]=arrayA[a];
use_a=false;
use_b= true;

a++;

}else if(use_b){
arrayC[i]= arrayB[b];
use_b=false;
use_a= true;
b++;
}
}

for(int i =0 ; i <10 ; i++)
cout<<arrayC[i];
return 0;
}

字符串

e1xvtsh3

e1xvtsh34#

如果你知道数组的大小,你可以用这种方式创建2D数组:

int array[2][5] = { {2, 3, 4, 5}, {6, 3, 1, 2, 9} };

字符串
也可以看看 malloc 函数。这是如何创建动态2D数组

# create array of two pointers
int **tab = (int**) malloc(sizeof(int*) * 2);
# create pointer to array
tab[0] = (int*) malloc(sizeof(int) * 5);
tab[1] = (int*) malloc(sizeof(int) * 5);

tab[0][0] = 3;
tab[0][1] = 2;
// ...

tab[1][0] = 6;
tab[1][1] = 3;
tab[1][2] = 1;
// ...

// remember to call free
free(tab[0]);
free(tab[1]);
free(tab);


当然,你应该使用for循环。我只告诉你如何创建数组。也请看看这个线程Using malloc for allocation of multi-dimensional arrays with different row lengths

相关问题