c - 从c中的数组中删除偶数

标签 c arrays pointers malloc

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

附:这是我在这里的第一个主题,所以请随时给我一些关于如何正确发布问题的提示。

最佳答案

假设您已经动态分配了一个包含 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 

关于c - 从c中的数组中删除偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33901207/

相关文章:

c - SSL_get_verify_result 为 irc.freenode.net 返回错误 20

计算连续出现的字符

c - C 编译器编译 i = i++; 是否合法?作为系统("rm -rf/");?

c - 指向链表指针的指针

c - 为什么我得到 "warning: assignment from incompatible pointer type [enabled by default]|"

c - .so : undefined reference to 'min'

arrays - Ruby : Choosing between each, 映射、注入(inject)、each_with_index 和 each_with_object

php - 从 array_rand 函数的结果创建简码

arrays - 尝试使用 PostgreSQL 在 Rails 4 中创建 json 对象数组时出错

c++ - 指针和数据类型