C中的数组清理

时间:2017-12-02 16:26:44

标签: c arrays

我不知道如何从存储在另一个数组中的索引的元素中清除数组。我需要完成以下由main(...)和函数

组成的C程序
void clear_MSBs( unsigned char dest_array[], unsigned char array_indices []). 

代码开头:

#define N 8
#define M 5
int main()
{
    unsigned char dest_array[N] = {248,249,250,251,252,253,254,255};
    unsigned char array_indices[M] = {0,2,3,6,7}; // contains M=5 elements
    clear_MSBs(dest_array, array_indices);
    // print the modified dest_array[] here
    return 0;
}

注意:保证存储在第二个数组中的所有索引都在 允许范围。 我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

如果通过清理,你的意思是将元素标记为无效(这可能是你想要的),那么你可以循环遍历indices数组,并使用indices数组的第i个元素作为目标的索引阵列。

示例:

#include <stdio.h>

#define N 8
#define M 5

void clear_MSBs(unsigned char dest_array[], unsigned char array_indices [])
{
    for(int i = 0; i < M; ++i)
        dest_array[array_indices[i]] = 0;
}

int main()
{
    unsigned char dest_array[N] = {248,249,250,251,252,253,254,255};
    unsigned char array_indices[M] = {0,2,3,6,7}; // contains M=5 elements
    clear_MSBs(dest_array, array_indices);
    // print the modified dest_array[] here
    for(int i = 0; i < N; ++i)
        if(dest_array[i] != 0)
            printf("%d ", dest_array[i]);
    printf("\n");
    return 0;
}

输出:

  

249 252 253

PS:代码假定无效元素的值为0。

答案 1 :(得分:0)

您只需要使用数组中的下一个值覆盖您要删除的内容,传播该更改,然后记住新结束的位置。

在C ++中,最好使用std :: vector:

std::vector<int> array; // initialize array... // delete element at index 2
array.erase(array.begin() + 2);