📌  相关文章
📜  如何从数组中删除特定项 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:23:48.328000             🧑  作者: Mango

如何从数组中删除特定项 - C 编程语言

在 C 编程语言中,删除数组中特定项的操作需要对数组进行重新排列或重新分配内存。下面将介绍两种常用的方法来完成这个任务。

方法一:重排数组

重排数组是最简单的方法之一,但如果删除的项位于数组的第一个或最后一个位置,则需要特别处理。

#include <stdio.h>

int removeItem(int arr[], int size, int item)
{
    int i, j, count = 0;
    for (i = 0; i < size; i++) {
        if (arr[i] == item) {
            count++;
            for (j = i; j < size - 1; j++) {
                arr[j] = arr[j + 1];
            }
            i--;
            size--;
        }
    }
    return count;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int size = 5, item = 3;
    int count = removeItem(arr, size, item);
    for (int i = 0; i < size - count; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

上述代码通过循环遍历整个数组,找到与指定项相同的元素,并逐个将这些元素向前移动。当循环结束时,数组中指定项的所有实例都已被移除。该函数返回被移除的项的总数。

方法二:重新分配内存

使用动态内存分配,可以轻松地从数组中删除特定项。这种方法允许您在无需重新排列数组元素的情况下删除项。

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

int* removeItem(int arr[], int size, int item)
{
    int i, j, count = 0;
    for (i = 0; i < size; i++) {
        if (arr[i] == item) {
            count++;
        }
    }
    int* newArr = (int*) malloc((size - count) * sizeof(int));
    j = 0;
    for (i = 0; i < size; i++) {
        if (arr[i] != item) {
            newArr[j] = arr[i];
            j++;
        }
    }
    return newArr;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int size = 5, item = 3;
    int* newArr = removeItem(arr, size, item);
    for (int i = 0; i < size - 1; i++) {
        printf("%d ", newArr[i]);
    }
    printf("\n");
    free(newArr);
    return 0;
}

上述代码使用动态内存分配创建一个新数组,该数组仅包含原数组中不等于指定项的所有元素。返回该数组的指针。

总结

无论是重新排列数组还是重新分配内存,都是从数组中删除特定项的有效方法。具体取决于您的具体需求和约束条件。