在c中删除数组中的偶数

时间:2015-11-24 18:31:48

标签: c arrays pointers malloc

您好我正在尝试大约2个小时来创建一个程序,该程序将从c中移除dinamyc分配的数组(使用malloc)中的偶数。可以帮助我提供一些提示或创建代码。

P.S。这是我的第一个主题,所以请随时给我一些关于如何正确发布qustion的提示。

2 个答案:

答案 0 :(得分:1)

假设您已经动态分配了n个元素的数组并对其进行了初始化。

在这种情况下,删除具有偶数值的元素的函数可以采用以下方式

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

可以通过以下方式调用

size_t m = remove_even( p, n );

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

其中p是指向动态分配的n个元素数组的指针。

该功能实际上不会删除任何内容。它只是将奇数元素移动到数组的开头。

然后,您可以使用标准C函数realloc来物理删除已删除的元素。

例如

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

if ( tmp != NULL ) p = tmp;

这是一个示范程序

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

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

它的输出是

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

答案 1 :(得分:0)

在尝试编写代码之前,有些事情需要检查,但我发现没有代码可以使用。

这不是一个教程网站,所以这意味着你应该向我们展示一些实际编译的代码,并在这里询问该代码是否存在一些问题。

除此之前,此代码应该为您提供有关如何检查数字是odd还是even的想法:

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

int main(void){
    int n;

    printf("Enter an integer:>  ");
    if((scanf("%d", &n)) != 1){
        printf("Error, Fix it!\n");
        exit(1);
    }

    if (n%2 == 0){
        printf("Even\n");
    }else{
        printf("Odd\n");
    }

    return 0;
}

这里的全部内容不是关于检查数组中的数字是odd还是even,而是要查找数字是odd还是{{1}的方法然后你应该检查那个数组里面是否有evenodd个数字。我希望你理解我的观点。