数组删除用户

时间:2017-02-08 13:45:18

标签: c arrays algorithm

我有以下数组,删除用户输入的所有元素的算法是什么?

eg.int arr[size]={12,10,7,43,12,12,26,83};

如果我想删除12 所以输出应该如下:

{10,7,43,26,83}

2 个答案:

答案 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;
}