我有以下数组,删除用户输入的所有元素的算法是什么?
eg.int arr[size]={12,10,7,43,12,12,26,83};
如果我想删除12 所以输出应该如下:
{10,7,43,26,83}
答案 0 :(得分:2)
从技术上讲,无法从数组中删除元素。数组具有固定大小,一旦设置就无法更改。
可能的解决方案是使用特殊值来标记数组中的“空”元素。或者将未删除的数据复制到另一个数组。或者跟踪数组的当前“大小”(“活动”元素的数量)并移动元素,使它们始终位于数组的“前面”。
答案 1 :(得分:1)
这是最直接的解决方案:
#include <stdio.h>
#include <stdlib.h>
int main()
{
const int size = 8;
int arr[size] = { 12, 10, 7, 43, 12, 12, 26, 83 };
int input;
int result_size = 0;
scanf("%d", &input);
// Find out size of new array
for (int i = 0; i < size; i++)
{
if (arr[i] != input)
{
result_size++;
}
}
// Create new array
int *result = (int*)malloc(result_size * sizeof(int));
if (!result)
{
return 1;
}
// Fill new array
int j = 0;
for (int i = 0; i <size; i++)
{
if (arr[i] != input)
{
result[j++] = arr[i];
}
}
for (int i = 0; i < result_size; i++)
{
printf("%d ", result[i]);
}
free(result);
return 0;
}