2015-06-13 149 views
-2

我是C新手。我使用的是Visual 2010.我需要从其他两个数组或一个函数中创建一个数组来合并它们;我来自PHP,所以我很抱歉,如果这是愚蠢的。我测试没有成功一些环..将2个数组组合或合并为循环或函数

一个真实的例子可能会有所帮助:

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] 
} 
+1

什么是在PHP代码? C代码非常相似 –

+3

你测试的循环未成功的地方在哪里? –

+2

目前还不清楚是否要以编程方式创建2-D数组,或者只是并排打印两个输入数组。 –

回答

2

直接的方法可以看看下面的方式

#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; 
} 

程序outp ut将如上所示。

+0

多thanx,我underdand更多 – jess

+0

@ user4406273不客气。:) –

1

说实在的,目前还不清楚所有。我已经这样理解了。

#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; 
} 
+0

thx,我只是测试这个并返回 – jess

+0

即时通讯对不起,我不想增加值,我需要采取arrayA中的每个值,以使arrayC的关键和推杆arrayB值在这个arrayC [3]将键和[6]的值,[2]将第二个键和[3]第二个值 – jess

+0

你回答finaly帮助太多,我明白更多,很多thanx – jess

0

请编辑您的问题,并指定它(你可以阅读https://stackoverflow.com/help/how-to-ask)。

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

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

也看看到的malloc功能。这是如何创建动态二维数组

# 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); 

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

+0

thx我学习你的答案和戈纳编辑 – jess

0

你可以在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; 
}