#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int remelement(int* p, int numsize, int val)
{
int* tmp = (int*)malloc(sizeof(int) * numsize);
int i;
int j = 0;
if (tmp == NULL)
{
return 0;
}
else
{
for (i = 0; i < numsize; i++)
{
if (p[i] != val)
{
tmp[j] = p[i];
j++;
}
}
}
memcpy(p, tmp, sizeof(int) * j);
free(tmp);
return j;
}
int main()
{
int numsize;
int i;
int val;
scanf_s("%d", &numsize);
int* p = (int*)malloc(sizeof(int) * numsize);
if (p == NULL)
{
return 0;
}
else
{
for (i = 0; i < numsize; i++)
{
scanf_s("%d", &p[i]);
}
}
scanf_s("%d", &val);
int newsize = remelement(p, numsize, val);
for (i = 0; i < newsize; i++)
{
printf("%d ", p[i]);
}
free(p);
return 0;
}
核心就是创建一个临时数组,将不等于val的元素复制到这个临时数组里,然后再放回去原来的数组中。这里需要注意,在遍历打印数组元素的时候,i要小于新的数组大小了,不应该是原来的numsize 。
结果