从C中的多维数组中提取一行

时间:2015-04-17 15:43:55

标签: c arrays multidimensional-array

好吧,似乎我没有写好我的问题,所以让我们再次这样做:

我正在尝试编写一个函数,它会在其参数中包含一个int的多维数组和另一个int: int ListNum(int tab [] [],int n)。
这个函数的目标是获取所述数组并提取第一行并返回其元素列表而不重复,因为您会猜到“int”选项卡[] []“是我们的数组,”int n“是一行的大小,我只需要提取数组的第一行,所以我猜这是我在参数中需要的所有信息。 ..

这是一个如何工作的例子:这是我们的数组 - > 标签[7] [2]:
| 1 | 3 | 1 | 2 | 0 | 2 | 2 |
| 2 | 1 | 1 | 1 | 0 | 2 | 3 |

结果将是一个新的数组,看起来像这样:| 1 | 3 | 2 | 0 |

现在我的问题是我不擅长编码,我已经大致了解了我应该做什么,但我仍然没有找到正确的解决方案。这就是我现在所做的:

int listNum(int tab[][], int n){
int i, j, v=0, temp, *x;
x=malloc(n*sizeof(int));
if(x==NULL){
    printf("Error allocation memory !\n");
    return -1;
}
x[0]=tab[0][0];
for(i=0;i<n;i++){
    temp=tab[i][0];
    for(j=0;j<n;j++){
        if (temp==x[j]){
        i++;
        break;
        }
    }
x[v+1]=tab[i][0];
}
return x;
}

但是,这个代码是错误的,但我不知道如何解决它,所以真的......任何帮助都会受到赞赏!

3 个答案:

答案 0 :(得分:0)

我没有得到你的问题..但是这就是我理解的“你需要打印(?)多维数组的第一行...值不应该重复......”

您没有告诉您是从用户还是从文件???

读取MDarray

如果它是来自用户的每次..不要在第一个地方重复它...在行中只存储一个值。并打印[0] [i]简单。

如果来自文件.... herez代码..

    firstline()
    {  
        for(i=0;i<n;i++) if(a[0][i]!='\O') 
        {
           printf("\t%c",a[0][i];
           for(j=i;j<n;j++) 
            if(a[0][i]==a[0][j]) 
               a[0][j]= '\0' ;
        }
     }

如果我误解了这个问题......请澄清......

PS:我没有传递任何参数,假设所有参数都是全局衰减***

更新

是的,请尝试以上代码......但是在您的代码中:

      x [ 0 ] = t a b [ 0 ] [ 0 ] ; 
      f o r ( i = 0 ; i < n ; i + + )
       { t emp = t a b [ i ] [ 0 ] ;    /* Ti0 is the
        column... it should be T[0][i] for 1st row*/
      f o r ( j = 0 ; j < n ; j + + ) 
       { i f ( t emp = = x [ j ] )
       { i + + ; b r e a k ; } } 
     x [ v + 1 ] = t a b [ i ] [ 0 ] ; //tab[0][i]

答案 1 :(得分:0)

int row [标签行的大小] = tab [0];

答案 2 :(得分:-1)

抓住:!)

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

size_t extract( int a[][7], size_t size, size_t n, int **b )
{
    if ( size <= n )
    {
        *b = NULL;
        return 0;
    }

    size_t count = 0;

    for ( int *p = a[n], *q = a[n]; q != a[n] + 7; ++q )
    {
        int *tmp = a[n];
        while ( tmp != p && *tmp != *q ) ++ tmp;
        if ( tmp == p )
        {
            ++p; ++count;
        }
    }

    *b = malloc( count * sizeof( int ) );

    for ( int *p = *b, *q = a[n]; q != a[n] + 7; ++q )
    {
        int *tmp = *b;
        while ( tmp != p && *tmp != *q ) ++ tmp;
        if ( tmp == p )
        {
            *p++ = *q;
        }
    }

    return count;
}

int main(void) 
{
    int Tab[2][7] = 
    {
        { 1, 3, 1, 2, 0, 2, 2 }, 
        { 2, 1, 1, 1, 0, 2, 3 },
    };
    const size_t N = sizeof( Tab ) / sizeof( *Tab );


    for ( size_t i = 0; i < N; i++ )
    {
        int *Row;
        size_t n  = extract( Tab, N, i, &Row );

        for ( size_t j = 0; j < n; j++ ) printf( "%d ", Row[j] );
        printf( "\n" );

        free( Row );
    }

    return 0;
}

输出

1 3 2 0 
2 1 0 3 

陈述后

* b = malloc(count * sizeof(int));

在函数中你可以插入一个支票

if ( *b != NULL )
{
   //...
}