Remove even numbers from array in c

后端 未结 2 2025
野性不改
野性不改 2021-01-29 11:36

Hello i\'m trying for about 2 hours to create a program which will remove even numbers from a dinamyc allocated array(with malloc)in c.Can somebody help me with some tips or cre

2条回答
  •  悲哀的现实
    2021-01-29 12:09

    Let's assume that you already allocated dynamically an array of n elements and initialized it.

    In this case the function that removes elements with even values can look the following way

    size_t remove_even( int *a, size_t n )
    {
        size_t m = 0;
    
        for ( size_t i = 0; i < n; i++ )
        {
            if ( a[i] % 2 != 0 )
            {
                if ( i != m ) a[m] = a[i];
                ++m;
            }
        }
    
        return m;
    }
    

    It can be called the following way

    size_t m = remove_even( p, n );
    
    for ( size_t i = 0; i < m; i++ ) printf( "%d ", a[i] );
    printf( "\n" );
    

    where p is the pointer to your dynamically allocated array of n elements.

    The function actually removes nothing. It simply moves odd elements to the beginning of the array.

    You can then use standard C function realloc to delete physically the removed elements.

    For example

    int *tmp = realloc( p, m * sizeof( int ) );
    
    if ( tmp != NULL ) p = tmp;
    

    Here is a demonstrative program

    #include 
    #include 
    
    size_t remove_even( int a[], size_t n )
    {
        size_t m = 0;
    
        for ( size_t i = 0; i < n; i++ )
        {
            if ( a[i] % 2 != 0 )
            {
                if ( i != m ) a[m] = a[i];
                ++m;
            }
        }
    
        return m;
    }
    
    #define N   10
    
    int main( void )
    {
        int *a = malloc( N * sizeof( int ) );
    
        for ( size_t i = 0; i < N; i++ ) a[i] = i;
    
        for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
        printf( "\n" );
    
        size_t m = remove_even( a, N );
    
        int *tmp = realloc( a, m * sizeof( int ) );
    
        if ( tmp != NULL ) a = tmp;
    
        for ( size_t i = 0; i < m; i++ ) printf( "%d ", a[i] );
        printf( "\n" );
    
        free( a );
    }
    

    Its output is

    0 1 2 3 4 5 6 7 8 9 
    1 3 5 7 9 
    

提交回复
热议问题