📅  最后修改于: 2023-12-03 15:23:48.328000             🧑  作者: Mango
在 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;
}
上述代码使用动态内存分配创建一个新数组,该数组仅包含原数组中不等于指定项的所有元素。返回该数组的指针。
无论是重新排列数组还是重新分配内存,都是从数组中删除特定项的有效方法。具体取决于您的具体需求和约束条件。